diff --git a/.gitattributes b/.gitattributes
index a79b79126f6fdd75196df52e134d463023b211a9..365ed287160197bece5cad2a33d2cc33b7fa592b 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -283,6 +283,7 @@ ecrire/inc/tourner.php -text
 ecrire/inc/traduire.php -text
 ecrire/inc/utils.php -text
 ecrire/inc/vieilles_defs.php -text
+ecrire/inc/vignette.php -text
 ecrire/inc/virtualiser.php -text
 ecrire/inc/xml.php -text
 ecrire/install/etape_.php -text
diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php
index 8de210fa5f5fd7a8de9fefb31434b72873699751..8542c36609efae30cfd9b56fd34a7722ac7773fc 100644
--- a/ecrire/inc/documents.php
+++ b/ecrire/inc/documents.php
@@ -35,7 +35,7 @@ function get_spip_doc($fichier) {
 	// gestion d'erreurs, fichier=''
 	if (!strlen($fichier))
 		return false;
-	
+
 	$fichier = (strpos($fichier, _DIR_IMG) === false)
 		? _DIR_IMG . $fichier
 		: $fichier ;
@@ -69,7 +69,7 @@ function contenu_document($arg, $charset='')
 	}
 
 	$r = spip_file_get_contents($f);
-	
+
 	if ($charset) {
 		include_spip('inc/charset');
 		if ($charset !== 'auto') {
@@ -105,7 +105,7 @@ function generer_url_document_dist($id_document, $args='', $ancre='') {
 	include_spip('inc/securiser_action');
 
 	// cette action doit etre publique !
-	return generer_url_action('acceder_document', 
+	return generer_url_action('acceder_document',
 		$args . ($args ? "&" : '')
 			. 'arg='.$id_document
 			. ($ancre ? "&ancre=$ancre" : '')
@@ -114,50 +114,11 @@ function generer_url_document_dist($id_document, $args='', $ancre='') {
 			,false,true);
 }
 
-//
-// Vignette pour les documents lies
-//
-
-// http://doc.spip.org/@vignette_par_defaut
-function vignette_par_defaut($ext, $size=true, $loop = true) {
-
-	if (!$ext)
-		$ext = 'txt';
-
-	// Chercher la vignette correspondant a ce type de document
-	// dans les vignettes persos, ou dans les vignettes standard
-	if (
-	# installation dans un dossier /vignettes personnel, par exemple /squelettes/vignettes
-	!@file_exists($v = find_in_path("vignettes/".$ext.".png"))
-	AND !@file_exists($v = find_in_path("vignettes/".$ext.".gif"))	
-	# dans /icones (n'existe plus)
-	AND !@file_exists($v = _DIR_IMG_ICONES . $ext.'.png')
-	AND !@file_exists($v = _DIR_IMG_ICONES . $ext.'.gif')
-	# icones standard
-	AND !@file_exists($v = _DIR_IMG_ICONES_DIST . $ext.'.png')
-	# cas d'une install dans un repertoire "applicatif"...
-	AND !@file_exists(_ROOT_IMG_ICONES_DIST . $v)
-	)
-		if ($loop)
-			$v = vignette_par_defaut('defaut', false, $loop=false);
-		else
-			$v = false; # pas trouve l'icone de base
-
-	if (!$size) return $v;
-
-	if ($size = @getimagesize($v)) {
-		$largeur = $size[0];
-		$hauteur = $size[1];
-	}
-
-	return array($v, $largeur, $hauteur);
-}
-
 // http://doc.spip.org/@document_et_vignette
 function document_et_vignette($document, $url, $portfolio=false) {
 	$image = $document['id_vignette'];
 
-	if ($image) 
+	if ($image)
 		$image = sql_fetsel("*", "spip_documents", "id_document = ".$image);
 	if ($image) {
 		if (!$portfolio OR !($GLOBALS['meta']['creer_preview'] == 'oui')) {
@@ -172,7 +133,7 @@ function document_et_vignette($document, $url, $portfolio=false) {
 		if ($portfolio) {
 			$x = 110;
 			$y = 120;
-		} else 	$x = $y =-1; 
+		} else 	$x = $y =-1;
 	}
 	if (!$url) $url = generer_url_document_dist($document['id_document'], 'document');
 	return vignette_automatique($image, $document, $url, $x, $y, '', "miniature_document");
@@ -200,7 +161,8 @@ function vignette_automatique($img, $doc, $lien, $x=0, $y=0, $align='', $class='
 				$img = image_reduire($img);
 		}
 		else{
-			$img = vignette_par_defaut($e, false);
+			$f = charger_fonction('vignette','inc');
+			$img = $f($e, false);
 			$size = @getimagesize($img);
 			$img = "<img src='$img' ".$size[3]." />";
 		}
@@ -234,9 +196,9 @@ function vignette_automatique($img, $doc, $lien, $x=0, $y=0, $align='', $class='
 }
 
 // Trouve une image caracteristique d'un document.
-// Si celui-ci est une image et que les outils graphiques sont dispos, 
+// Si celui-ci est une image et que les outils graphiques sont dispos,
 // retourner le document (en exploitant sa copie locale s'il est distant).
-// Autrement retourner la vignette fournie par SPIP pour ce type MIME 
+// Autrement retourner la vignette fournie par SPIP pour ce type MIME
 // Resultat: un fichier local existant
 
 function image_du_document($document)
@@ -247,7 +209,7 @@ function image_du_document($document)
 	  AND $document['fichier']) {
 		if ($document['distant'] == 'oui') {
 			$image = _DIR_RACINE.copie_locale($document['fichier']);
-		} 
+		}
 		else
 			$image = get_spip_doc($document['fichier']);
 		if (@file_exists($image)) return $image;
@@ -262,7 +224,7 @@ function image_du_document($document)
 // http://doc.spip.org/@afficher_documents_colonne
 function afficher_documents_colonne($id, $type="article",$script=NULL) {
 	include_spip('inc/autoriser');
-	
+
 	// il faut avoir les droits de modif sur l'article pour pouvoir uploader !
 	if (!autoriser('joindredocument',$type,$id))
 		return "";
@@ -283,7 +245,7 @@ function afficher_documents_colonne($id, $type="article",$script=NULL) {
 	OR $GLOBALS['meta']["documents_$type"]=='non') {
 
 	// Ajouter nouvelle image
-	$ret = "<div id='images'>\n" 
+	$ret = "<div id='images'>\n"
 		. $joindre(array(
 			'cadre' => 'relief',
 			'icone' => 'image-24.gif',
@@ -347,7 +309,7 @@ function afficher_documents_colonne($id, $type="article",$script=NULL) {
 	//// Documents associes
 	$res = sql_select("D.id_document", "spip_documents AS D LEFT JOIN spip_documents_liens AS T ON T.id_document=D.id_document", "T.id_objet=" . intval($id) . " AND T.objet=" . sql_quote($type)
 	. ((!_INTERFACE_DOCUMENTS)
-		? " AND D.mode='document'"	
+		? " AND D.mode='document'"
     	: " AND D.mode IN ('image','document')"
 	), "", "D.mode, D.id_document");
 
@@ -359,7 +321,7 @@ function afficher_documents_colonne($id, $type="article",$script=NULL) {
 		$ret .= http_script('', "async_upload.js")
 		  . http_script('$("form.form_upload").async_upload(async_upload_article_edit)');
 	}
-    
+
 	return $ret;
 }
 
@@ -370,7 +332,7 @@ function afficher_documents_colonne($id, $type="article",$script=NULL) {
 // http://doc.spip.org/@affiche_raccourci_doc
 function affiche_raccourci_doc($doc, $id, $align) {
 	static $num = 0;
-	
+
 	if ($align) {
 		$pipe = "|$align";
 
@@ -379,7 +341,7 @@ function affiche_raccourci_doc($doc, $id, $align) {
 	} else {
 		$align='center';
 	}
-	
+
 	return
 	  ((++$num > 1) ? "" : http_script('',  "spip_barre.js"))
 		. "\n<div style='text-align: $align'$onclick>&lt;$doc$id$pipe&gt;</div>\n";
@@ -394,7 +356,7 @@ function est_inclus($id_document) {
 }
 
 //
-// Afficher un document sous forme de bloc depliable 
+// Afficher un document sous forme de bloc depliable
 // en donnant un apercu
 // et en indiquer le raccourci permettant l'incrustation
 // Pour les distant, donner un bouton pour rappatriement (trombone)
@@ -404,7 +366,7 @@ function est_inclus($id_document) {
 // http://doc.spip.org/@afficher_case_document
 function afficher_case_document($id_document, $id, $script, $type, $deplier=false) {
 	global $spip_lang_right;
-	
+
 	$document = sql_fetsel("D.id_document, D.id_vignette,D.extension,D.titre,D.descriptif,D.fichier,D.largeur,D.hauteur,D.taille,D.mode,D.distant, D.date, L.vu", "spip_documents AS D INNER JOIN spip_documents_liens AS L ON L.id_document=D.id_document", "L.id_objet=".intval($id)." AND objet=".sql_quote($type)." AND L.id_document=".intval($id_document));
 
 	if (!$document) return "";
@@ -448,7 +410,7 @@ function afficher_case_document($id_document, $id, $script, $type, $deplier=fals
 			. affiche_raccourci_doc('doc', $id_document, 'center')
 			. affiche_raccourci_doc('doc', $id_document, 'right')
 			. "</div>\n";
-	
+
 			if ($vign) {
 				$raccourci .= "<div style='padding:2px; ' class='arial1 spip_xx-small'>";
 				$raccourci .= "<b>"._T('info_inclusion_directe')."</b><br />";
@@ -491,7 +453,7 @@ function afficher_case_document($id_document, $id, $script, $type, $deplier=fals
 		    . document_et_vignette($document, '', true)
 		    . '</div>'
 		    . "\n<div class='verdana1' style='text-align: center; color: black;'>\n"
-		    . ($type_titre ? $type_titre : 
+		    . ($type_titre ? $type_titre :
 		       ( _T('info_document').' '.majuscules($extension)))
 		    . "</div>"))
 		. $apercu
@@ -500,7 +462,7 @@ function afficher_case_document($id_document, $id, $script, $type, $deplier=fals
 		. "</div>\n"
 		. $legender($id_document, $document, $script, $type, $id, "document$id_document", $deplier)
 		. fin_cadre($style)
-		. '</div>'; 
+		. '</div>';
 }
 
 // Etablit la liste des documents orphelins, c'est-a-dire qui ne sont lies
@@ -529,7 +491,7 @@ function lister_les_documents_orphelins() {
 	return array_keys(array_filter($orphelins));
 }
 
-// Supprimer les documents de la table spip_documents, 
+// Supprimer les documents de la table spip_documents,
 // ainsi que les fichiers correspondants dans IMG/
 // Fonction a n'appeler que sur des documents orphelins
 // http://doc.spip.org/@supprimer_documents
diff --git a/ecrire/inc/vignette.php b/ecrire/inc/vignette.php
new file mode 100644
index 0000000000000000000000000000000000000000..53b88ec5aa4794fe0bb627af8f1a1263c81ae469
--- /dev/null
+++ b/ecrire/inc/vignette.php
@@ -0,0 +1,53 @@
+<?php
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2010                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+//
+// Vignette pour les documents lies
+//
+function inc_vignette_dist($ext, $size=true, $loop = true) {
+
+	if (!$ext)
+		$ext = 'txt';
+
+	// Chercher la vignette correspondant a ce type de document
+	// dans les vignettes persos, ou dans les vignettes standard
+	if (
+	# installation dans un dossier /vignettes personnel, par exemple /squelettes/vignettes
+	!@file_exists($v = find_in_path("vignettes/".$ext.".png"))
+	AND !@file_exists($v = find_in_path("vignettes/".$ext.".gif"))
+	# dans /icones (n'existe plus)
+	AND !@file_exists($v = _DIR_IMG_ICONES . $ext.'.png')
+	AND !@file_exists($v = _DIR_IMG_ICONES . $ext.'.gif')
+	# icones standard
+	AND !@file_exists($v = _DIR_IMG_ICONES_DIST . $ext.'.png')
+	# cas d'une install dans un repertoire "applicatif"...
+	AND !@file_exists(_ROOT_IMG_ICONES_DIST . $v)
+	)
+		if ($loop){
+			$f = charger_fonction('vignette','inc');
+			$v = $f('defaut', false, $loop=false);
+		}
+		else
+			$v = false; # pas trouve l'icone de base
+
+	if (!$size) return $v;
+
+	if ($size = @getimagesize($v)) {
+		$largeur = $size[0];
+		$hauteur = $size[1];
+	}
+
+	return array($v, $largeur, $hauteur);
+}
+
+?>
\ No newline at end of file
diff --git a/ecrire/public/quete.php b/ecrire/public/quete.php
index 9ca6a4e1fccac3c1513a3f57a87aacc26a33083a..dfa2c4f5ff6b4cd063422760b6f6711ca0afa2f7 100644
--- a/ecrire/public/quete.php
+++ b/ecrire/public/quete.php
@@ -29,7 +29,7 @@ function quete_chapo($id_article, $connect) {
 
 function quete_parent_lang($table,$id,$connect=''){
 	static $cache_quete = array();
-	
+
 	if (!isset($cache_quete[$connect][$table][$id])
 	AND in_array($table,array('spip_rubriques','spip_articles','spip_syndic','spip_breves'))){
 		$select = ($table=='spip_rubriques'?'id_parent':'id_rubrique');
@@ -76,7 +76,7 @@ function quete_profondeur($id, $connect='') {
 // http://doc.spip.org/@quete_date_postdates
 function quete_date_postdates() {
 	return
-	  date('Y-m-d H:i:s', 
+	  date('Y-m-d H:i:s',
 	       ($GLOBALS['meta']['date_prochain_postdate'] > time())
 			? $GLOBALS['meta']['date_prochain_postdate']
 	       : (time()+(3600*24*10000))) ;
@@ -146,7 +146,10 @@ function quete_logo_file($row, $connect=NULL) {
 	include_spip('inc/documents');
 	$logo = vignette_logo_document($row, $connect);
 	if (!$logo) $logo = image_du_document($row);
-	if (!$logo) $logo = vignette_par_defaut($row['extension'], false);
+	if (!$logo){
+		$f = charger_fonction('vignette','inc');
+		$logo = $f($row['extension'], false);
+	}
 	return get_spip_doc($logo);
 }
 
@@ -251,7 +254,7 @@ function quete_debut_pagination($primary,$valeur,$pas,$res,$serveur=''){
 	// si on a pas trouve
 	if ($row[$primary]!=$valeur)
 		return 0;
-	
+
 	// sinon, calculer le bon numero de page
 	return floor($pos/$pas)*$pas;
 }