diff --git a/ecrire/config-fonctions.php3 b/ecrire/config-fonctions.php3
index 40867dc750934f35ab3e824d114df12acf022669..bf4e075a51bd1854ffc4703876edb02c40d58920 100644
--- a/ecrire/config-fonctions.php3
+++ b/ecrire/config-fonctions.php3
@@ -19,7 +19,7 @@ if ($connect_statut != '0minirezo' OR !$connect_toutes_rubriques) {
 }
 
 init_config();
-if ($changer_config == 'oui' OR $image_process) {
+if ($changer_config == 'oui') {
 	appliquer_modifs_config();
 }
 
@@ -52,11 +52,17 @@ function afficher_choix_vignette($process) {
 if ($flag_gd OR $flag_imagick OR $convert_command) {
 	debut_cadre_relief("image-24.gif");
 
-	$gd_formats = lire_meta("gd_formats");
+	$formats_graphiques = lire_meta("formats_graphiques");
 	$creer_preview = lire_meta("creer_preview");
 	$taille_preview = lire_meta("taille_preview");
 	if ($taille_preview < 10) $taille_preview = 120;
 
+	// application du choix de vignette
+	if ($image_process) {
+		ecrire_meta('image_process', $image_process);
+		ecrire_metas();
+	}
+
 	echo "<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3 WIDTH=\"100%\">";
 	echo "<TR><TD BGCOLOR='$couleur_foncee'>";
 	echo "<B><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=3 COLOR='white'>"._T('info_generation_miniatures_images')."</FONT></B></TD></TR>";
@@ -99,19 +105,39 @@ if ($flag_gd OR $flag_imagick OR $convert_command) {
 
 			if ($nb_process>1) {
 				echo "<div>"._T('info_image_process');
-			} else if ($nb == 1 AND $process == '') {
+			} else if ($nb == 1 AND lire_meta('image_process') == '') {
 				ecrire_meta('image_process', $p);
 				ecrire_metas();
 			}
 
+
+			// mettre a jour les formats graphiques lisibles
+			switch (lire_meta('image_process')) {
+				case 'gd1':
+					$formats_graphiques = lire_meta('gd_formats');
+					break;
+				case 'gd2':
+					$formats_graphiques = lire_meta('gd_formats');
+					break;
+				case 'convert':
+					$formats_graphiques = 'gif,jpg,png';
+					break;
+				case 'imagick':
+					$formats_graphiques = 'gif,jpg,png';
+					break;
+			}
+			ecrire_meta('formats_graphiques', $formats_graphiques);
+			ecrire_metas();
+
+
 			echo "<div>";
 
-			if ($gd_formats AND (lire_meta('image_process')=='gd1' OR lire_meta('image_process')=='gd2'))
-				echo '<div>'._T('info_format_image', array('gd_formats' => $gd_formats)).'</div>';
+			if ($formats_affiche = str_replace(',', ',&nbsp;', $formats_graphiques))
+				echo '<div>'._T('info_format_image', array('gd_formats' => $formats_affiche)).'</div>';
 
-			echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"._T('info_taille_maximale_vignette');
+			echo '<div>'._T('info_taille_maximale_vignette');
 			echo " &nbsp;&nbsp;<INPUT TYPE='text' NAME='taille_preview' VALUE='$taille_preview' class='fondl' size=5>";
-			echo " "._T('info_pixels');
+			echo " "._T('info_pixels').'</div>';
 
 			echo "</div>";
 		}
diff --git a/ecrire/inc_charsets.php3 b/ecrire/inc_charsets.php3
index 07fafb97fd293584cbc62a308d6088c5e68d09d1..558ac72dfc0d1fd5f780564347344cb5b210273f 100644
--- a/ecrire/inc_charsets.php3
+++ b/ecrire/inc_charsets.php3
@@ -193,7 +193,7 @@ function load_charset ($charset = 'AUTO', $langue_site = 'AUTO') {
 		193=>'A', 194=>'A', 195=>'A', 196=>'A', 197=>'A', 198=>'AE', 199=>'C',
 		200=>'E', 201=>'E', 202=>'E', 203=>'E', 204=>'I', 205=>'I', 206=>'I',
 		207=>'I', 209=>'N', 210=>'O', 211=>'O', 212=>'O', 213=>'O', 214=>'O',
-		216=>'O', 217=>'U', 218=>'U', 219=>'U', 220=>'U', 223=>'B', 224=>'a',
+		216=>'O', 217=>'U', 218=>'U', 219=>'U', 220=>'U', 223=>'ss', 224=>'a',
 		225=>'a', 226=>'a', 227=>'a', 228=>'a', 229=>'a', 230=>'ae', 231=>'c',
 		232=>'e', 233=>'e', 234=>'e', 235=>'e', 236=>'i', 237=>'i', 238=>'i',
 		239=>'i', 241=>'n', 242=>'o', 243=>'o', 244=>'o', 245=>'o', 246=>'o',
@@ -282,7 +282,7 @@ function load_charset ($charset = 'AUTO', $langue_site = 'AUTO') {
 		7924=>"Y.",273=>"d-",208=>"D-",
 
 		// allemand
-		223=>'ss',228=>'ae',246=>'oe',252=>'ue',196=>'Ae',214=>'Oe',220=>'Ue'
+		228=>'ae',246=>'oe',252=>'ue',196=>'Ae',214=>'Oe',220=>'Ue'
 		);
 		while (list($u,$t) = each($translit_c))
 			$trans[$u] = $t;
diff --git a/ecrire/inc_config.php3 b/ecrire/inc_config.php3
index da770b97e18c19bf622cc37a4fcd5a9bd1ad769a..c98b076218005b17f472e71973d13510f9870c65 100644
--- a/ecrire/inc_config.php3
+++ b/ecrire/inc_config.php3
@@ -59,8 +59,6 @@ function init_config() {
 
 		'creer_htpasswd' => 'non',
 
-		'image_process' => '',
-
 		'langue_site' => $lang,
 
 		'multi_articles' => 'non',
@@ -227,7 +225,6 @@ function appliquer_modifs_config() {
 		'jours_neuf',
 		'forum_prive_admin',
 
-		'image_process',
 		'activer_moteur',
 		'activer_statistiques',
 
diff --git a/ecrire/inc_documents.php3 b/ecrire/inc_documents.php3
index 0721778f0b3b0dc10ba31ae71ca83e942c52f744..0350bd16a946b3536c54d6d900ab4f66a6545cd3 100644
--- a/ecrire/inc_documents.php3
+++ b/ecrire/inc_documents.php3
@@ -204,7 +204,8 @@ function integre_image($id_document, $align, $type_aff = 'IMG') {
 		$id_type = $row['id_type'];
 		$titre = typo($row['titre']);
 		$descriptif = propre($row['descriptif']);
-		$fichier = generer_url_document($id_document);
+		$fichier = $row['fichier'];
+		$url_fichier = generer_url_document($id_document);
 		$largeur = $row['largeur'];
 		$hauteur = $row['hauteur'];
 		$taille = $row['taille'];
@@ -222,31 +223,38 @@ function integre_image($id_document, $align, $type_aff = 'IMG') {
 			$query_vignette = "SELECT * FROM spip_documents WHERE id_document = $id_vignette";
 			$result_vignette = spip_query($query_vignette);
 			if ($row_vignette = @spip_fetch_array($result_vignette)) {
-				$fichier_vignette = generer_url_document($id_vignette);
+				$fichier_vignette = $row_vignette['fichier'];
+				$url_fichier_vignette = generer_url_document($id_vignette);
 				$largeur_vignette = $row_vignette['largeur'];
 				$hauteur_vignette = $row_vignette['hauteur'];
 
-				// verifier l'existence du fichier correspondant sinon le recreer
+				// verifier l'existence du fichier correspondant
 				$path = ($flag_ecrire?'../':'') . $fichier_vignette;
 				if (!@file_exists($path) AND (!$flag_ecrire OR !@file_exists('../IMG/test.jpg')))
-					$fichier_vignette = '';
+					$url_fichier_vignette = '';
 			}
 		}
 		else if ($mode == 'vignette') {
-			$fichier_vignette = $fichier;
+			$url_fichier_vignette = $url_fichier;
 			$largeur_vignette = $largeur;
 			$hauteur_vignette = $hauteur;
 		}
 
-		// si pas de vignette, essayer de creer une preview
-		if (!$fichier_vignette)
-			$fichier_vignette = ($flag_ecrire?'../':'').'spip_image.php3?vignette='.rawurlencode(str_replace('../', '', $fichier));
+		// si pas de vignette, utiliser la vignette par defaut
+		// ou essayer de creer une preview (images)
+		if (!$url_fichier_vignette) {
+			if (!ereg(",$extension,", ','.lire_meta('formats_graphiques').',')) {
+				list($url_fichier_vignette, $largeur_vignette, $hauteur_vignette) = vignette_par_defaut($extension);
+			} else {
+				$url_fichier_vignette = ($flag_ecrire?'../':'').'spip_image.php3?vignette='.rawurlencode(str_replace('../', '', $fichier));
+			}
+		}
 
 		if ($type_aff=='fichier_vignette')
-			return $fichier_vignette;
+			return $url_fichier_vignette;
 
-		if ($fichier_vignette) {
-			$vignette = "<img src='$fichier_vignette' border=0";
+		if ($url_fichier_vignette) {
+			$vignette = "<img src='$url_fichier_vignette' border=0";
 			if ($largeur_vignette && $hauteur_vignette)
 				$vignette .= " width='$largeur_vignette' height='$hauteur_vignette'";
 			if ($titre) {
@@ -518,15 +526,11 @@ function afficher_documents_non_inclus($id_article, $type = "article", $flag_mod
 		}
 		echo ".";
 
-		if ($GLOBALS['flag_gd']) {
-			$creer_preview = lire_meta("creer_preview");
+		if (lire_meta("creer_preview") == 'oui') {
 			$taille_preview = lire_meta("taille_preview");
-			$gd_formats = lire_meta("gd_formats");
+			$formats_graphiques = lire_meta("formats_graphiques");
 			if ($taille_preview < 15) $taille_preview = 120;
-
-			if ($creer_preview == 'oui') {
-				echo "<p>"._T('texte_creation_automatique_vignette', array('gd_formats' => $gd_formats, 'taille_preview' => $taille_preview));
-			}
+			echo "<p>"._T('texte_creation_automatique_vignette', array('gd_formats' => $formats_graphiques, 'taille_preview' => $taille_preview));
 		}
 		echo "</td><td width=20>&nbsp;</td>";
 		echo "<td valign='top'><font face='Verdana,Arial,Sans,sans-serif' size=2>";
diff --git a/ecrire/inc_logos.php3 b/ecrire/inc_logos.php3
index f69f22b8710a26f49da4676d630dd165d0b5c6cb..ed97063fc019b70921bba814d272f25fa811427f 100644
--- a/ecrire/inc_logos.php3
+++ b/ecrire/inc_logos.php3
@@ -201,14 +201,15 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destination, $p
 		$process = lire_meta('image_process');
 
 	// liste des formats qu'on sait lire
-	$formats_lecture = array('jpg','png','gif');
+	$formats_graphiques = lire_meta('formats_graphiques');
+	$formats_sortie = array('jpg','png','gif');
 
 	// si le doc n'est pas une image, refuser
-	if (!eregi(",$format,", ",".join(',', $formats_lecture).","))
+	if (!eregi(",$format,", ",$formats_graphiques,"))
 		return;
 
 	// chercher un cache
-	while (list(,$fmt) = each ($formats_lecture))
+	while (list(,$fmt) = each ($formats_sortie))
 		if (@file_exists($destination.'.'.$fmt)) {
 			$vignette = $destination.'.'.$fmt;
 			if ($force) @unlink($vignette);
@@ -218,10 +219,18 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destination, $p
 	if ($force OR !$vignette OR (@filemtime($vignette) < @filemtime($image))) {
 
 		$creation = true;
-		if (!$srcsize = @getimagesize($image)) return;
-		$srcWidth=$srcsize[0];
-		$srcHeight=$srcsize[1];
-		list ($destWidth,$destHeight) = image_ratio($srcWidth, $srcHeight, $maxWidth, $maxHeight);
+
+		// calculer la taille
+		if ($srcsize = @getimagesize($image)) {
+			$srcWidth=$srcsize[0];
+			$srcHeight=$srcsize[1];
+			list ($destWidth,$destHeight) = image_ratio($srcWidth, $srcHeight, $maxWidth, $maxHeight);
+		} else if ($process == 'convert' OR $process == 'imagick') {
+			$destWidth = $maxWidth;
+			$destHeight = $maxHeight;
+		} else {
+			return;
+		}
 
 		// imagemagick en ligne de commande
 		if ($process == 'convert') {
@@ -229,6 +238,8 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destination, $p
 			$commande = "$convert_command -size ${destWidth}x${destHeight} $image -geometry ${destWidth}x${destHeight} +profile \"*\" ".escapeshellcmd($vignette);
 			spip_log($commande);
 			exec($commande);
+			if (!@file_exists($vignette))
+				return;	// echec commande
 		}
 		else
 		 // imagick (php4-imagemagick)
@@ -237,10 +248,12 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destination, $p
 			$handle = imagick_readimage($image);
 			imagick_resize($handle, $destWidth, $destHeight, IMAGICK_FILTER_LANCZOS, 0.75);
 			imagick_write($handle, $vignette);
+			if (!@file_exists($vignette)) return;	// echec imagick
 		}
 		else
 		// gd ou gd2
 		if ($process == 'gd1' OR $process == 'gd2') {
+
 			// Recuperer l'image d'origine
 			if ($format == "jpg") {
 				$srcImage = @ImageCreateFromJPEG($image);
diff --git a/spip_image.php3 b/spip_image.php3
index 40d7951095b985773f63c78629b3a48cf5b4a801..c00001ec4ad0daaad7b9c2f1c874f7465ad65fc7 100644
--- a/spip_image.php3
+++ b/spip_image.php3
@@ -373,25 +373,24 @@ if ($doc_supp) {
 if ($vignette) {
 	// securite
 	$fichier_vignette = '';
-	if (!eregi('^IMG/(.*/)?([^\./]+)\.([a-z0-9]+)$', $vignette, $regs)) exit;
-	$source = $regs[0];
-	$format = $regs[3];
-	// $destination = $regs[2].'-s';	// adresse old style
-
-	include_local('inc-cache.php3');
-	$destination = 'IMG/'.creer_repertoire('IMG','vignettes').$regs[2].'-s';	// adresse new style
-
-	if (lire_meta("creer_preview") == 'oui') {
-		$taille_preview = lire_meta("taille_preview");
-		if ($taille_preview < 10) $taille_preview = 120;
-		include_ecrire('inc_logos.php3');
-		if ($preview = creer_vignette($source, $taille_preview, $taille_preview, $format, $destination))
-			$fichier_vignette = $preview['fichier'];
+	if (eregi('^IMG/(.*/)?([^\./]+)\.([a-z0-9]+)$', $vignette, $regs)) {
+		$source = $regs[0];
+		$format = $regs[3];
+		include_local('inc-cache.php3');
+		$destination = 'IMG/'.creer_repertoire('IMG','vignettes').$regs[2].'-s';	// adresse new style
+
+		if (lire_meta("creer_preview") == 'oui') {
+			$taille_preview = lire_meta("taille_preview");
+			if ($taille_preview < 10) $taille_preview = 120;
+			include_ecrire('inc_logos.php3');
+			if ($preview = creer_vignette($source, $taille_preview, $taille_preview, $format, $destination))
+				$fichier_vignette = $preview['fichier'];
+		}
 	}
 
 	if (!$fichier_vignette) {
 		include_ecrire('inc_documents.php3');
-		list($fichier_vignette) = vignette_par_defaut($extension);
+		list($fichier_vignette) = vignette_par_defaut($format);
 		if (!$fichier_vignette)
 			list($fichier_vignette) = vignette_par_defaut('txt');
 	}