diff --git a/dist/article.html b/dist/article.html
index 2a0abf48d3dcce355bb98be415f0a3ada715958a..614edcff0980fdfa0aaf9ce854798a02b65b60e8 100644
--- a/dist/article.html
+++ b/dist/article.html
@@ -190,7 +190,7 @@
 ]#FIN_SURLIGNE
 
 
-<BOUCLE_afficher_document(DOCUMENTS){id_document}{mode=document}{fichier==(png|jpg|gif)$}{doublons}>
+<BOUCLE_afficher_document(DOCUMENTS){id_document}{mode=document}{extension==(png|jpg|gif)$}{doublons}>
 [<h3 class="spip">(#TITRE)</h3>]
 [<div>(#DESCRIPTIF)</div>]
 
@@ -199,9 +199,11 @@
 
 <B_documents_portfolio>
 <div><hr>
-<BOUCLE_documents_portfolio(DOCUMENTS){id_article}{mode=document}{fichier==(png|jpg|gif)$}{doublons}>
+<BOUCLE_documents_portfolio(DOCUMENTS){id_article}{mode=document}{extension==(png|jpg|gif)$}{doublons}>
 	<div style="float: left;">
-	[<a href="#URL_ARTICLE[(#URL_ARTICLE|strpos{'?'}|?{'&amp;','?'})]id_document=#ID_DOCUMENT">(#FICHIER|reduire_image{1000,52})</a>][<div><b>(#TITRE)</b></div>][<div>(#DESCRIPTIF)</div>]
+
+	[<a href="#URL_ARTICLE[(#URL_ARTICLE|strpos{'?'}|?{'&amp;','?'})]id_document=#ID_DOCUMENT">(#LOGO_DOCUMENT{500,60})</a>]
+[<div><b>(#TITRE)</b></div>][<div>(#DESCRIPTIF)</div>]
 	</div>
 </BOUCLE_documents_portfolio>
 </div>
diff --git a/ecrire/inc_documents.php3 b/ecrire/inc_documents.php3
index 37cb54d35acfa657f4fd1cfdca4c8f2b8769ff5f..11b0a8696bdea9acedb9a35cce3c9264def0d51c 100644
--- a/ecrire/inc_documents.php3
+++ b/ecrire/inc_documents.php3
@@ -52,20 +52,30 @@ function vignette_par_defaut($type_extension, $size=true) {
 }
 
 
-function document_et_vignette($url, $id_type) {
-	if ($id_type) {
-		list($extension) = spip_fetch_array(spip_query("SELECT extension FROM
-		spip_types_documents WHERE id_type=$id_type"));
+//
+// Affiche le document avec sa vignette par defaut, dans le portfolio
+// Attention : si c'est un fichier graphique on prefere afficher une vue
+// reduite, quand c'est possible (presque toujours, donc)
+//
+function document_et_vignette($document, $url) {
+	// a supprimer avec spip_types_documents
+	list($extension) = spip_fetch_array(spip_query("SELECT extension FROM
+		spip_types_documents WHERE id_type=".$document['id_type']));
+
+	if (strstr(lire_meta('formats_graphiques'), $extension)
+	AND lire_meta('creer_preview') == 'oui') {
+		$image = prive_lien_image_reduite ($document['largeur'], $document['hauteur'], $document['fichier']);
 	}
 
-	list($fichier, $largeur, $hauteur) =
-		vignette_par_defaut($extension);
+	if (!$image) {
+		list($fichier, $largeur, $hauteur) = vignette_par_defaut($extension);
+		$image = "<a href='$url'><img src='$fichier' style='border-width: 0px'  height='$hauteur' width='$largeur' /></a>";
+	}
 
-	if (!$taille)
-		return "<a href='$url'><img src='$fichier' style='border-width: 0px' /></a>";
+	if (!$url)
+		return $image;
 	else
-		return "<a href='$url'><img src='$fichier' style='border-width: 0px'  height='$taille' width='$taille' /></a>";
-
+		return "<a href='$url'>$image</a>";
 }
 
 //
@@ -358,17 +368,24 @@ function texte_upload_manuel($dir, $inclus = '') {
 }
 
 
-function texte_vignette_document($largeur_vignette, $hauteur_vignette, $fichier_vignette, $fichier_document) {
+//
+// Retourne le lien HTML vers l'image reduite (pour l'espace prive)
+//
+function prive_lien_image_reduite ($largeur_vignette, $hauteur_vignette, $fichier_vignette) {
 	global $connect_id_auteur;
 	include_ecrire("inc_logos.php3");
 
-	$taille = image_ratio($largeur_vignette, $hauteur_vignette, 120, 110);
-	$w = $taille[0];
-	$h = $taille[1];
+	list($w,$h) = image_ratio($largeur_vignette, $hauteur_vignette, 120, 110);
 	$hash = calculer_action_auteur ("reduire $w $h");
 	
 	$image = "<img src='../spip_image_reduite.php3?img=$fichier_vignette&taille_x=$w&taille_y=$h&hash=$hash&hash_id_auteur=$connect_id_auteur' width='$w' height='$h' style='border-width: 0px' />";
 	
+	return $image;
+}
+
+function texte_vignette_document($largeur_vignette, $hauteur_vignette, $fichier_vignette, $fichier_document) {
+
+	$image = prive_lien_image_reduite ($largeur_vignette, $hauteur_vignette, $fichier_vignette);
 
 # Ca ne marche pas toujours car fichier_vignette peut etre n'importe quoi
 #	$fid = "?date=".@filemtime($fichier_vignette);
@@ -538,7 +555,7 @@ function afficher_portfolio (
 		if ($case == $bord_droit) $style .= " border-$spip_lang_right: 1px solid $couleur;";
 		echo "<td width='33%' style='text-align: $spip_lang_left; $style' valign='top'>";
 
-			// Signaler les documents distants par une icone de site
+			// Signaler les documents distants par une icone de trombone
 			if ($document['distant'] == 'oui') {
 				echo "<img src='"._DIR_IMG_PACK.'attachment.gif'."' style='float: $spip_lang_right;' alt=\"".entites_html($document['fichier'])."\" title=\"" .
 entites_html($document['fichier'])."\" />\n";
@@ -562,9 +579,12 @@ entites_html($document['fichier'])."\" />\n";
 			}
 
 			// bloc rotation de l'image
+			// si c'est une image, qu'on sait la faire tourner, qu'elle
+			// n'est pas distante, et qu'elle n'a pas de vignette perso !
 			if ($flag_modif
 			AND strstr(lire_meta('formats_graphiques'), $document['extension'])
-			AND $document['distant']!='oui') {
+			AND $document['distant']!='oui'
+			AND !$id_vignette) {
 				echo "<div class='verdana1' style='float: $spip_lang_right; text-align: $spip_lang_right;'>";
 				$process = lire_meta('image_process');
 				if ($process == 'imagick' OR $process == 'gd2'
@@ -614,27 +634,13 @@ entites_html($document['fichier'])."\" />\n";
 			//
 			// Recuperer la vignette et afficher le doc
 			//
-			
-			if ($album == 'portfolio') {
-				// En mode portfolio, on ne travaille pas avec les vignettes
-				// (sinon, pas de squelette possible)
-				echo reduire_image_logo(_DIR_PREFIX1."$fichier", 120);
-			} else {
-				if ($id_vignette AND
-					$vignette = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = $id_vignette"))) {
-					$fichier_vignette = generer_url_document($id_vignette);
-					$largeur_vignette = $vignette['largeur'];
-					$hauteur_vignette = $vignette['hauteur'];
-					$taille_vignette = $vignette['taille'];
-				
-					echo texte_vignette_document($largeur_vignette, $hauteur_vignette, $fichier_vignette, $url);
-				}
-				else {
-					echo document_et_vignette($url, $document['id_type']); 
-				}
+			if ($id_vignette
+			AND $vignette = spip_fetch_array(spip_query("SELECT * FROM spip_documents WHERE id_document = $id_vignette"))) {
+				echo document_et_vignette($vignette, $url);
+			}
+			else {
+				echo document_et_vignette($document, $url); 
 			}
-			
-			
 
 			echo "</div>"; // fin du bloc vignette + rotation
 
@@ -730,13 +736,10 @@ entites_html($document['fichier'])."\" />\n";
 				echo "</form>";
 
 
-				if ($album != 'portfolio') {
-					// bloc mettre a jour la vignette
-					// (pas de vignette en portfolio)
-					echo "<hr />";
-					bloc_gerer_vignette($document, $image_url, $redirect_url, $album);
-				}
-				
+				// bloc mettre a jour la vignette
+				echo "<hr />";
+				bloc_gerer_vignette($document, $image_url, $redirect_url, $album);
+
 				echo "</div>";
 				
 				// bouton "supprimer le doc"
@@ -801,6 +804,8 @@ function bloc_gerer_vignette($document, $image_url, $redirect_url, $album) {
 		$link->getUrl(), "vignette-24.png", "supprimer.gif");
 	}
 	else {
+/****
+	OBSOLETE
 		// lien "creation automatique"
 		if (strstr(lire_meta('formats_graphiques'), $document['extension'])
 		AND lire_meta('creer_preview') == 'oui'
@@ -818,6 +823,7 @@ function bloc_gerer_vignette($document, $image_url, $redirect_url, $album) {
 			icone_horizontale(_T('info_creer_vignette'),
 			$link->getUrl(), "vignette-24.png", "creer.gif");
 		}
+*****/
 
 		// lien "upload vignette"
 		$link = new Link ($image_url);
@@ -829,7 +835,7 @@ function bloc_gerer_vignette($document, $image_url, $redirect_url, $album) {
 		$link->addVar('ancre', $album);
 		afficher_upload($link,
 			$redirect_url.'&show_docs='.$id_document,
-			_T('info_remplacer_vignette'), 'portfolio', false);
+			/* _T('info_remplacer_vignette') */'', 'portfolio', false);
 	}
 	echo fin_block();
 }
diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index 535331a545af344405741016bb015770482b4eea..e4cf1fbbd86f7bde40f88f2c8854513660b21297 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -656,10 +656,13 @@ function extraire_fichier($img) {
 	return $logo;
 }
 
-function reduire_image($img, $taille = 120, $taille_y=0) {
+function reduire_image($img, $taille = 0, $taille_y=0) {
 	if (!$img) return;
 	include_ecrire('inc_logos.php3');
-	
+
+	if (!$taille)
+		$taille = lire_meta('taille_preview');
+
 	if (eregi("onmouseover=\"this\.firstChild\.src=\'([^']+)\'\"", $img, $match)) {
 		$mouseover = extraire_fichier(reduire_image_logo($match[1], $taille, $taille_y));
 	}
@@ -688,6 +691,32 @@ function hauteur($img) {
 	return $h;
 }
 
+//
+// Cree au besoin la copie locale d'un fichier distant
+// mode = 'test' - ne faire que tester
+// mode = 'auto' - charger au besoin
+// mode = 'force' - charger toujours (mettre a jour)
+//
+function copie_locale($source, $mode='auto') {
+	include_ecrire('inc_getdocument.php3');
+	$local = fichier_copie_locale($source);
+
+	if ($source != $local) {
+		if (($mode=='auto' AND !@file_exists($local))
+		OR $mode=='force') {
+			include_ecrire('inc_sites.php3');
+			$contenu = recuperer_page($source);
+			if ($contenu)
+				ecrire_fichier($local, $contenu);
+			else
+				return false;
+		}
+	}
+
+	return $local;
+}
+
+
 //
 // Recuperation de donnees dans le champ extra
 // Ce filtre n'a de sens qu'avec la balise #EXTRA
diff --git a/ecrire/inc_getdocument.php3 b/ecrire/inc_getdocument.php3
index 857098fe4624a24437ca828960c229cb7c4f6ac4..031220b5404f0caa2c97d4c80be831c88e80fd3e 100644
--- a/ecrire/inc_getdocument.php3
+++ b/ecrire/inc_getdocument.php3
@@ -213,14 +213,35 @@ function afficher_compactes($image_name /* not used */, $fichiers, $link) {
 // Si on doit conserver une copie locale des fichiers distants, autant que ca
 // soit a un endroit canonique -- si ca peut etre bijectif c'est encore mieux,
 // mais la tout de suite je ne trouve pas l'idee, etant donne les limitations
-// des filessystems
-function fichier_copie_locale($source, $extension) {
+// des filesystems
+function nom_fichier_copie_locale($source, $extension) {
 	$dir = _DIR_IMG. creer_repertoire(_DIR_IMG, 'distant'); # IMG/distant/
 	$dir2 = $dir . creer_repertoire($dir, $extension); 		# IMG/distant/pdf/
 	return $dir2 . substr(basename($source).'-'.md5($source),0,12).
 		substr(md5($source),0,4).'.'.$extension;
 }
 
+//
+// Donne le nom de la copie locale de la source
+//
+function fichier_copie_locale($source) {
+	// Si c'est une image de IMG/ pas de souci
+	if (preg_match(',^'._DIR_IMG.',', $source))
+		return $source;
+
+	// Si l'extension n'est pas precisee, aller la chercher dans la table
+	// des documents -- si la source n'est pas dans la table des documents,
+	// on ne fait rien
+	if ($t = spip_fetch_array(spip_query("SELECT * FROM spip_documents
+	WHERE fichier='".addslashes($source)."' AND distant='oui'")))
+		list($extension) = spip_fetch_array(spip_query("SELECT extension
+		FROM spip_types_documents WHERE id_type=".$t['id_type']));
+
+	if ($extension)
+		return nom_fichier_copie_locale($source, $extension);
+}
+
+
 // Recuperer les infos d'un document distant, sans trop le telecharger
 function recuperer_infos_distantes($source, $max=0) {
 	include_ecrire('inc_sites.php3');
@@ -251,8 +272,12 @@ function recuperer_infos_distantes($source, $max=0) {
 			$a['taille'] = intval($regs[1]);
 	}
 
-	// Si on n'a pas reussi avec une requete HEAD, ou si au contraire on a
-	// il s'agit d'une image pas trop grosse ou d'un fichier html, on va aller
+	// Echec avec HEAD, on tente avec GET
+	if (!$a) {
+		$a = recuperer_infos_distantes($source, 1024*1024);
+	}
+
+	// S'il s'agit d'une image pas trop grosse ou d'un fichier html, on va aller
 	// recharger le document en GET et recuperer des donnees supplementaires...
 	if (preg_match(',^image/(jpeg|gif|png|swf),', $mime_type)) {
 		if ($max == 0
@@ -262,7 +287,7 @@ function recuperer_infos_distantes($source, $max=0) {
 			$a = recuperer_infos_distantes($source, 1024*1024);
 		}
 		else if ($a['body']) {
-			$a['fichier'] = fichier_copie_locale($source, $a['extension']);
+			$a['fichier'] = nom_fichier_copie_locale($source, $a['extension']);
 			ecrire_fichier($a['fichier'], $a['body']);
 			$size_image = @getimagesize($a['fichier']);
 			$a['largeur'] = intval($size_image[0]);
@@ -427,12 +452,17 @@ function ajouter_un_document ($source, $nom_envoye, $type_lien, $id_lien, $mode,
 	else
 		$documents_actifs[] = $id_document; 
 
+/**
+	DESACTIVE CAR UTILISATION PAR DEFAUT DES IMAGES REDUITES
+
 	// Creer la vignette des images
 	if (ereg(",$ext,", ','.lire_meta('formats_graphiques').',')
 	AND $mode == 'document'
 	AND $type_image)
 		creer_fichier_vignette($fichier);
 
+**/
+
 	// Pour les fichiers distants remettre l'URL de base
 	if ($distant == 'oui')
 		spip_query("UPDATE spip_documents SET fichier='".addslashes($source)."'
@@ -918,9 +948,12 @@ function tourner_document($var_rot, $doc_rotate, $convert_command) {
 		$largeur = $size_image[0];
 		$hauteur = $size_image[1];
 
+/*
+	A DESACTIVER PEUT-ETRE ? QUE SE PASSE--IL SI JE TOURNE UNE IMAGE AYANT UNE VGNETTE "MANUELLE" -> NE PAS CREER DE VIGNETTE TOURNEE -- EN VERITE IL NE FAUT PAS PERMETTRE DE TOURNER UNE IMAGE AYANT UNE VIGNETTE MANUELLE
 		if ($id_vignette > 0) {
 			creer_fichier_vignette($image);
 		}
+*/
 
 		spip_query("UPDATE spip_documents SET largeur=$largeur, hauteur=$hauteur WHERE id_document=$doc_rotate");
 
diff --git a/ecrire/inc_logos.php3 b/ecrire/inc_logos.php3
index f43a304c42cfe145b5063824845a31e7ac89b962..3516283bdb8d401e60d9e0694ec68bf29b479698 100644
--- a/ecrire/inc_logos.php3
+++ b/ecrire/inc_logos.php3
@@ -270,8 +270,16 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destdir, $destf
 			return;
 		}
 
+		// Si l'image est de la taille demandee (ou plus petite), simplement
+		// la retourner
+		if ($srcWidth
+		AND $srcWidth <= $maxWidth AND $srcHeight <= $maxHeight) {
+			$vignette = $destination.'.'.preg_replace(',^.*\.,', '', $image);
+			@copy($image, $vignette);
+		}
+
 		// imagemagick en ligne de commande
-		if ($process == 'convert') {
+		else if ($process == 'convert') {
 			$format = $formats_sortie[0];
 			$vignette = $destination.".".$format;
 			$commande = "$convert_command -size ${destWidth}x${destHeight} ./$image -geometry ${destWidth}x${destHeight} +profile \"*\" ./".escapeshellcmd($vignette);
@@ -283,8 +291,8 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destdir, $destf
 			}
 		}
 		else
-		 // imagick (php4-imagemagick)
-		 if ($process == 'imagick') {
+		// imagick (php4-imagemagick)
+		if ($process == 'imagick') {
 			$format = $formats_sortie[0];
 			$vignette = "$destination.".$format;
 			$handle = imagick_readimage($image);
@@ -295,7 +303,7 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destdir, $destf
 				return;	
 			}
 		}
-		if ($process == "netpbm") {
+		else if ($process == "netpbm") {
 			$format_sortie = "jpg";
 			$vignette = $destination.".".$format_sortie;
 			$pnmtojpeg_command = ereg_replace("pnmscale", "pnmtojpeg", $pnmscale_command);
@@ -325,7 +333,7 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destdir, $destf
 			}
 		}
 		// gd ou gd2
-		if ($process == 'gd1' OR $process == 'gd2') {
+		else if ($process == 'gd1' OR $process == 'gd2') {
 
 			// Recuperer l'image d'origine
 			if ($format == "jpg") {
@@ -393,7 +401,7 @@ function creer_vignette($image, $maxWidth, $maxHeight, $format, $destdir, $destf
 	$retour['height'] = $hauteur = $size[1];
 	$retour['fichier'] = $vignette;
 	$retour['format'] = $format;
-	$retour['date'] = filemtime($vignette);
+	$retour['date'] = @filemtime($vignette);
 	
 
 	// renvoyer l'image
@@ -437,9 +445,10 @@ function taille_image($img) {
 // [(#LOGO_ARTICLE||reduire_image{100,60})]
 //
 
-function reduire_image_logo($img, $taille = 120, $taille_y=0) {
-	if (!$taille_y)
-		$taille_y = $taille;
+function reduire_image_logo($img, $taille = 0, $taille_y=0) {
+	if (!$taille) $taille = lire_meta('taille_preview');
+	if (!$taille) $taille = 150;
+	if (!$taille_y) $taille_y = $taille;
 
 	// recuperer le nom du fichier
 	if (eregi("img src=['\"]([^'\"]+)['\"]", $img, $regs)) $logo = $regs[1];
@@ -471,8 +480,9 @@ function reduire_image_logo($img, $taille = 120, $taille_y=0) {
 				$vignette = $preview['fichier'];
 				$width = $preview['width'];
 				$height = $preview['height'];
-				$date = $preview['date'];
-				return "<img src='$vignette?date=$date' width='$width' height='$height'$attributs />";
+				if (!_DIR_ECRIRE)
+					$date = '?date='.$preview['date'];
+				return "<img src='$vignette$date' width='$width' height='$height'$attributs />";
 			}
 			else if ($taille_origine = @getimagesize($logo)) {
 				$date = filemtime($logo);
diff --git a/inc-balises.php3 b/inc-balises.php3
index 4b3e81abaecf672274d1fa5a12c2a4855d57dc4d..6764d86fa540e86420475e30c387fc02792e4d41 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -599,15 +599,15 @@ function calculer_balise_logo ($p) {
 		$code_lien .= ", '". addslashes($align) . "'";
 	}
 	$code_lien .= ",'logo $type_objet ' . $_id_objet";
+
 	// cas des documents
 	if ($type_objet == 'DOCUMENT') {
-		$code_logo = "calcule_document($_id_objet, '" .
+		$p->code = "calcule_logo_document($_id_objet, '" .
 			$p->descr['documents'] .
-		  '\', $doublons)';
-		if ($flag_fichier)
-		  $p->code = "calcule_fichier_logo($code_logo)";
-		else
-		  $p->code = "affiche_logos(array($code_logo, ''), $code_lien)";
+			'\', $doublons, '. intval($flag_fichier).", $code_lien, '".
+			// #LOGO_DOCUMENT{x,y} donne la taille maxi
+			texte_script(param_balise($p))
+			."')";
 	}
 	else {
 	  $p->code = "affiche_logos(calcule_logo('$type_objet', '" .
diff --git a/inc-calcul-outils.php3 b/inc-calcul-outils.php3
index de5a5cec7e0d96aac211de4688ff65d67ff091fc..88460d451acf89412960ca8df8abaa691c0ee4b2 100644
--- a/inc-calcul-outils.php3
+++ b/inc-calcul-outils.php3
@@ -249,37 +249,67 @@ function calcul_branche ($generation) {
 }
 
 // fonction appelee par la balise #LOGO_DOCUMENT
-function calcule_document($id_document, $doubdoc, &$doublons) {
+function calcule_logo_document($id_document, $doubdoc, &$doublons, $flag_fichier, $params, $lien, $align, $alt) {
 	if (!$id_document) return '';
-	if ($doubdoc && $id_document) $doublons["documents"] .= ', ' . $id_document;
+	if ($doubdoc) $doublons["documents"] .= ','.$id_document;
 
 	if (!($row = spip_abstract_select(array('id_type', 'id_vignette', 'fichier', 'mode'), array('spip_documents AS documents'), array("id_document = $id_document"))))
-// pas de document. Ne devrait pas arriver
+		// pas de document. Ne devrait pas arriver
 		return ''; 
 
 	list($id_type, $id_vignette, $fichier, $mode) = spip_abstract_fetch($row);
+
+	// Lien par defaut = l'adresse du document
+	if (!$lien) $lien = $fichier;
+
+	// Y a t il une vignette personnalisee ?
 	if ($id_vignette) {
-		if ($res = spip_abstract_select(array('fichier'), array('spip_documents AS documents'), array("id_document = $id_vignette"))) {
+		if ($res = spip_abstract_select(array('fichier'),
+		array('spip_documents AS documents'),
+		array("id_document = $id_vignette"))) {
 			list($vignette) = spip_abstract_fetch($res);
 			if (@file_exists($vignette))
-				return generer_url_document($id_vignette);
-				# return ($fichier); # en std g_u_d fait ca
+				$logo = generer_url_document($id_vignette);
+		}
+	} else if ($mode == 'vignette') {
+		$logo = generer_url_document($id_document);
+	}
+
+	if (!$logo) {
+		// Retrouver l'extension
+		list($extension) =
+			spip_abstract_fetch(spip_abstract_select(array('extension'),
+			array('spip_types_documents AS documents'),
+			array("id_type = " . intval($id_type))));
+		if (!$extension) $extension = 'txt';
+
+		// Pas de vignette, mais un fichier image -- creer la vignette
+		if (strstr(lire_meta('formats_graphiques'), $extension)
+		AND lire_meta('creer_preview') == 'oui') {
+			if ($img = copie_locale($fichier)) {
+				// taille maximum [(#LOGO_DOCUMENT{300,52})]
+				list($x,$y) = split(',', ereg_replace("[\{\}]", "", $params)); 
+				$lien_logo = reduire_image($img, $x, $y);
+				$logo = extraire_attribut($lien_logo, 'src');
+				if ($lien)
+					$lien_logo = "<a href=\"$lien\">$lien_logo</a>";
+			}
 		}
-	} else if ($mode == 'vignette') 
-		return generer_url_document($id_document);
-		# return $fichier; # en std g_u_d fait ca
-
-	// calcul de l'extension par tous les moyens
-	if ($id_type) {
-		list($ext) = spip_abstract_fetch(spip_abstract_select(array('extension'), array('spip_types_documents AS documents'), array("id_type = " . intval($id_type))));
-	} else {
-		eregi('\.([a-z0-9]+)$', $fichier, $regs);
-		$ext = $regs[1];
+
+		// Document sans vignette ni image : vignette par defaut
+		if (!$logo)
+			$logo = vignette_par_defaut($extension, false);
 	}
 
-	// Pas de vignette mais une extension :
-	// envoyer une vignette par defaut
-	return vignette_par_defaut($ext ? $ext : 'txt', false);
+	// flag_fichier : seul le fichier est demande
+	if ($flag_fichier)
+		return calcule_fichier_logo($logo); # supprimer le IMG/
+
+	// sinon calculer le code html de l'image, sauf si reduire_image le donne
+	if (!$lien_logo)
+		$lien_logo = affiche_logos(array($logo), $lien, $align, $alt);
+
+	return $lien_logo;
 }
 
 
diff --git a/spip_image.php3 b/spip_image.php3
index a978d6605f3037f51ff112e6c81113ef83d7f7cf..2248e15b0abaef8e958062ec1335efc61d0ee33c 100644
--- a/spip_image.php3
+++ b/spip_image.php3
@@ -49,6 +49,9 @@ if ($forcer_document) $mode = 'document';
 if ($test_vignette)
 	$retour_image = tester_vignette($test_vignette);
 
+/**
+	OBSOLETE
+
 // Creation de vignette depuis le portfolio (ou autre)
 else if ($vignette) {
 	if ($creer_vignette == 'oui' AND
@@ -59,6 +62,8 @@ else if ($vignette) {
 		$retour_image = creer_fichier_vignette($vignette, true); # obsolete
 }
 
+**/
+
 
 //
 // Ajout d'un document ou d'une image
diff --git a/spip_image_reduite.php3 b/spip_image_reduite.php3
index ec72be56c45276cc36c08510ff0fc6056f4e1344..0de806e7aca42acde641e6dfdaf5589f6c8b60a8 100644
--- a/spip_image_reduite.php3
+++ b/spip_image_reduite.php3
@@ -14,10 +14,20 @@
 include ("ecrire/inc_version.php3");
 include_ecrire("inc_admin.php3");
 include_ecrire("inc_logos.php3");
+include_ecrire("inc_filtres.php3"); # pour copie_locale()
+
+
+// Securite : on est appele exclusivement depuis ecrire/
+if (!verifier_action_auteur("reduire $taille_x $taille_y", $hash, $hash_id_auteur)) exit;
+
 
 if (!$taille_y)
 	$taille_y = $taille_x;
 
+
+// Si le fichier est distant voir si on dispose d'une copie locale
+$img = copie_locale($img);
+
 // Chercher l'image dans le repertoire IMG/
 if (eregi("(\.\./)?(.*)\.(jpg|gif|png)$", $img, $regs)
 AND $i = cherche_image_nommee($regs[2], array($regs[3])) # hu ?
@@ -32,9 +42,7 @@ AND $i = cherche_image_nommee($regs[2], array($regs[3])) # hu ?
 if (lire_meta('creer_preview') <> 'oui')
 	$stop = true;
 
-if (!$stop
-AND verifier_action_auteur("reduire $taille_x $taille_y", $hash, $hash_id_auteur))
-	{
+if (!$stop) {
 		list($dir,$nom,$format) = $i;
 		$logo = $dir . $nom . '.' . $format;
 		
@@ -46,7 +54,9 @@ AND verifier_action_auteur("reduire $taille_x $taille_y", $hash, $hash_id_auteur
 }
 
 // Envoie le navigateur vers l'image cible
-redirige_par_entete($img);
-
+if ($img)
+	redirige_par_entete($img);
+else
+	redirige_par_entete(_DIR_IMG.'test.jpg'); # image noire = erreur (on ne devrait jamais arriver ici, sauf echec du chargement d'un doc distant)
 
 ?>
\ No newline at end of file