diff --git a/article-dist.html b/article-dist.html
index 30608a36befdf409810d44805f3c70a5f998e701..d0211dc73540f9e6452f9ff0f474a52a7ea7b0e9 100644
--- a/article-dist.html
+++ b/article-dist.html
@@ -134,7 +134,7 @@
 [<div class="surtitre">(#SURTITRE)</div>]
 <h1 class="titre-texte">#TITRE</h1>
 [<div class="surtitre">(#SOUSTITRE)</div>]
-[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee).]
+[(#DATE|nom_jour)] [(#DATE|affdate).]
 </div>
 
 	<div class="encart">
diff --git a/breve-dist.html b/breve-dist.html
index bec85d3448c4e5fa788c32379cdc22f9ad2f4257..5caca0a7c893e75a572981ed2e4929deab4083cf 100644
--- a/breve-dist.html
+++ b/breve-dist.html
@@ -125,7 +125,7 @@
 <div id="cartouche">
 [(#LOGO_BREVE|left)]
 <h1 class="titre-texte">#TITRE</h1>
-[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee).]
+[(#DATE|nom_jour)] [(#DATE|affdate).]
 </div>
 
 	<div class="encart">
diff --git a/ecrire/inc_charsets.php3 b/ecrire/inc_charsets.php3
index e93907e34a3e0f260c700aa820eb56623ecf766a..d785d6d4c83d7a90f4fea951f49074057628c82f 100644
--- a/ecrire/inc_charsets.php3
+++ b/ecrire/inc_charsets.php3
@@ -383,7 +383,7 @@ function translitteration ($texte, $charset='AUTO') {
 	} else if ($charset == 'windows-1251') {
 		$texte = translit_windows_1251($texte);
 	} else if ($GLOBALS['flag_iconv']) {
-		if ($iconv = @iconv(strtoupper($charset), 'ASCII//TRANSLIT', $texte) && !ereg("^?+$",$iconv)) {
+		if ($iconv = @iconv(strtoupper($charset), 'ASCII//TRANSLIT', $texte) && !ereg('^\?+$',$iconv)) {
 			$texte = $iconv;
 		}
 	}
@@ -412,16 +412,16 @@ function translit_iso8859_1($texte) {
 
 function translit_windows_1251($texte) {
 	$code = array (
-		128=>'D%',129=>'G%',136=>'EUR',138=>'LJ',140=>'NJ',141=>'KJ',142=>'Ts',143=>'DZ',144=>'d%',149=>'o',
-		154=>'lj',156=>'nj',157=>'kj',158=>'ts',159=>'dz',161=>'V%',162=>'v%',163=>'J%',165=>'G3',168=>'IO',
-		170=>'IE',175=>'YI',178=>'II',179=>'ii',180=>'g3',181=>'mu',184=>'io',186=>'ie',188=>'j%',189=>'DS',
+		128=>'D',129=>'G',136=>'euro',138=>'LJ',140=>'NJ',141=>'KJ',142=>'Ts',143=>'DZ',144=>'d',149=>'o',
+		154=>'lj',156=>'nj',157=>'kj',158=>'ts',159=>'dz',161=>'V',162=>'v',163=>'J',165=>'G',168=>'IO',
+		170=>'IE',175=>'YI',178=>'II',179=>'ii',180=>'g',181=>'mu',184=>'io',186=>'ie',188=>'j',189=>'DS',
 		190=>'ds',191=>'yi',192=>'A',193=>'B',194=>'V',195=>'G',196=>'D',197=>'E',198=>'ZH',199=>'Z',
 		200=>'I',201=>'J',202=>'K',203=>'L',204=>'M',205=>'N',206=>'O',207=>'P',208=>'R',209=>'S',210=>'T',
-		211=>'U',212=>'F',213=>'H',214=>'C',215=>'CH',216=>'SH',217=>'SCH',218=>'"',219=>'Y',220=>'\'',
-		221=>'`e',222=>'YU',223=>'YA',224=>'a',225=>'b',226=>'v',227=>'g',228=>'d',229=>'e',230=>'zh',
+		211=>'U',212=>'F',213=>'H',214=>'C',215=>'CH',216=>'SH',217=>'SCH',218=>'"',219=>'Y',220=>'_',
+		221=>'e',222=>'YU',223=>'YA',224=>'a',225=>'b',226=>'v',227=>'g',228=>'d',229=>'e',230=>'zh',
 		231=>'z',232=>'i',233=>'j',234=>'k',235=>'l',236=>'m',237=>'n',238=>'o',239=>'p',240=>'r',241=>'s',
-		242=>'t',243=>'u',244=>'f',245=>'h',246=>'c',247=>'ch',248=>'sh',249=>'sch',250=>'"',251=>'y',
-		252=>'\'',253=>'`E',254=>'yu',255=>'ya');
+		242=>'t',243=>'u',244=>'f',245=>'h',246=>'c',247=>'ch',248=>'sh',249=>'sch',250=>' ',251=>'y',
+		252=>'_',253=>'E',254=>'yu',255=>'ya');
 
 	for ($i=0; $i<strlen($texte);$i++) {
 		$d = substr($texte,$i,1);
diff --git a/ecrire/inc_index.php3 b/ecrire/inc_index.php3
index bb7c6862c4164aced271d86bf4b8eacea09d2f91..e75367213ad681982b045b8422e86580eb3ef2a8 100644
--- a/ecrire/inc_index.php3
+++ b/ecrire/inc_index.php3
@@ -7,8 +7,7 @@ define("_ECRIRE_INC_INDEX", "1");
 
 function nettoyer_chaine_indexation($texte) {
 	include_ecrire("inc_charsets.php3");
-	$texte = strtolower(translitteration($texte));
-	return $texte;
+	return strtolower(translitteration($texte));
 }
 
 // Merci a Herve Lefebvre pour son apport sur cette fonction
@@ -27,16 +26,23 @@ function spip_split($reg, $texte) {
 
 function indexer_chaine($texte, $val = 1, $min_long = 3) {
 	global $index, $mots;
+	global $indexer_ogm;
 
-	$texte = supprimer_tags($texte);
+	$texte = ' '.ereg_replace("<[^>]*>"," ",$texte).' ';	// supprimer_tags()
 	$regs = separateurs_indexation();
 	$texte = strtr($texte, $regs, "                                                           ");
-	$table = spip_split(" +([^ ]{0,$min_long} +)*", ' '.$texte);
+
+	$table = spip_split(" +", $texte);
 	while (list(, $mot) = each($table)) {
-		$mot = nettoyer_chaine_indexation($mot);
-		$h = substr(md5($mot), 0, 16);
-		$index[$h] += $val;
-		$mots .= ",(0x$h,'$mot')";
+		if ($mot2 = nettoyer_chaine_indexation($mot)) {
+			if ((strlen($mot2) > $min_long)
+			|| ($indexer_ogm && ereg("[A-Z][A-Z][A-Z]",$mot) && $mot2=strtolower($mot).'_'))
+			{
+				$h = substr(md5($mot2), 0, 16);
+				$index[$h] += $val;
+				$mots .= ",(0x$h,'$mot2')";
+			}
+		}
 	}
 }
 
@@ -273,12 +279,16 @@ function requete_txt_integral($objet, $hash_recherche) {
 
 // decode la chaine recherchee et la traduit en hash
 function requete_hash ($rech) {
+	$min_long = 3;
 	$s = nettoyer_chaine_indexation(urldecode($rech)); 
 	$regs = separateurs_indexation()." "; 
 	$s = split("[$regs]+", $s); 
 	while (list(, $val) = each($s))
-		if (strlen($val) > 3)
-			$dico[] = "dico LIKE \"$val%\""; 
+		if (strlen($val) > $min_long)
+			$dico[] = "dico LIKE '$val%'"; 
+		else if (strlen($val) == $min_long) {
+			$dico[] = "dico = '".$val."_'";
+		}
 	if ($dico) {
 		$query2 = "SELECT HEX(hash) AS hx FROM spip_index_dico WHERE ".join(" OR ", $dico);
 		$result2 = spip_query($query2);
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 23222e00351d39e4635eb5156cec9f1104a6d7eb..544b3e25c45ac389d09cf48324bf29221a5931aa 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -102,9 +102,12 @@ $table_prefix = "spip";
 $cookie_prefix = "spip";
 
 // faut-il autoriser SPIP a compresser les pages a la volee quand le
-// navigateur l'accepte ?
+// navigateur l'accepte (valable pour apache 1.3 seulement) ?
 $auto_compress = true;
 
+// faut-il indexer les mots de 3 lettres en capitales ('OGM') ?
+$indexer_ogm = true;
+
 // faut-il loger les infos de debug dans data/spip.log ?  (peu utilise)
 $debug = false;
 
diff --git a/forum-dist.html b/forum-dist.html
index 91cc293fe3469d01953603fec9b0d4317fa39bc4..6856163fc2954660a601a8eb791d6e66c845d52e 100644
--- a/forum-dist.html
+++ b/forum-dist.html
@@ -61,7 +61,7 @@
 	<h2 class="titre-extrait"><a href="#URL_ARTICLE">#TITRE</a></h2>
 	[<div class="surtitre">(#SOUSTITRE)</div>]
 	<div class="detail">
-	[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee)]
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
 	<B_auteurs_un>par <BOUCLE_auteurs_un(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_un>
 	</div>
 	[<div class="texte"><div class="extrait">(#INTRODUCTION)</div></div>]
@@ -73,7 +73,7 @@
 	[(#LOGO_BREVE|right)]
 	<h2 class="titre-extrait"><a href="#URL_BREVE">#TITRE</a></h2>
 	<div class="detail">
-	[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee)]
+	[Le (#DATE|nom_jour)] [(#DATE|affdate)]
 	</div>
 	[<div class="texte"><div class="extrait">(#INTRODUCTION)</div></div>]
 	<br>
@@ -83,7 +83,7 @@
 	En r&eacute;ponse au message&nbsp;:
 	<h2 class="titre-extrait"><a href="#URL_BREVE">#TITRE</a></h2>
 	<div class="detail">
-	[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee)]
+	[Le (#DATE|nom_jour)] [(#DATE|affdate)]
 	</div>
 	[<div class="texte"><div class="extrait">(#TEXTE)</div></div>]
 	<br>
diff --git a/inc-calcul-squel.php3 b/inc-calcul-squel.php3
index 931c50d9cb4caebd624d0868599237bcf8ba0b97..35642c882eacad888e4976782446446d5e30b5b0 100644
--- a/inc-calcul-squel.php3
+++ b/inc-calcul-squel.php3
@@ -1723,7 +1723,7 @@ function calculer_boucle($id_boucle, $prefix_boucle)
 		$texte .= '
 		global $recherche, $hash_recherche;
 		if (!$hash_recherche) {
-			$s = nettoyer_chaine_indexation(urldecode($recherche));
+			$s = nettoyer_chaine_indexation(supprimer_tags(urldecode($recherche)));
 			$regs = separateurs_indexation()." ";
 			$s = split("[$regs]+", $s);
 
@@ -1732,6 +1732,8 @@ function calculer_boucle($id_boucle, $prefix_boucle)
 			while (list(, $val) = each($s)) {
 				if (strlen($val) > 3) {
 					$dico[] = "dico LIKE \"$val%\"";
+				} else if (strlen($val) == 3) {
+					$dico[] = "dico = \"".$val."_\"";
 				}
 			}
 			if ($dico) {
diff --git a/mot-dist.html b/mot-dist.html
index bdf5d8447b1102fabc4ea9aa35020124d293b2a6..a17b81455337be09f93d312941e1a6b68bacc0eb 100644
--- a/mot-dist.html
+++ b/mot-dist.html
@@ -172,7 +172,7 @@
 <BOUCLE_articles(ARTICLES) {id_mot} {par titre}>
 	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
 	<div class="detail">
-	[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee)]
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
 	<B_auteurs>par <BOUCLE_auteurs(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs>
 	</div>
 	<br>
diff --git a/recherche-dist.html b/recherche-dist.html
index 30015585ff596b59ec2b9a668427dc51668f29c6..26ef44b97e084ee2bdb868a47bc9ac8a89f0c460 100644
--- a/recherche-dist.html
+++ b/recherche-dist.html
@@ -157,7 +157,7 @@
 <BOUCLE_articles(ARTICLES) {recherche} {par points} {inverse} {0,10}>
 	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
 	<div class="detail">
-	[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee)]
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
 	<B_auteurs_articles>par <BOUCLE_auteurs_articles(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_articles>
 	</div>
 	<br>
diff --git a/resume-dist.html b/resume-dist.html
index e4743c5d5ac9df8a1a307d76ecc089b7a5ef8781..449a90980352e3257b0e960894802b0a7856996d 100644
--- a/resume-dist.html
+++ b/resume-dist.html
@@ -90,7 +90,7 @@
 	<h2 class="titre-extrait"><a href="#URL_ARTICLE">#TITRE</a></h2>
 	[<div class="surtitre">(#SOUSTITRE)</div>]
 	<div class="detail">
-	[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee)]
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
 	<B_auteurs_un>par <BOUCLE_auteurs_un(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_un>
 	[<br>Popularit&eacute;&nbsp;: <span class="important">(#POPULARITE)</span> %]
 	</div>
@@ -133,7 +133,7 @@
 <BOUCLE_articles_populaires(ARTICLES) {par popularite} {inverse} {2,8}>
 	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
 	<div class="detail">
-	[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee)]
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
 	<B_auteurs_recents>par <BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_recents><br>
 	Popularit&eacute;&nbsp;: <span class="important">#POPULARITE</span> %
 	</div>
diff --git a/rubrique-dist.html b/rubrique-dist.html
index 9cdd84099feba54ecab8aad19de5fafe98b40220..0db3df210ed77117451a34b01ec55688a552d41a 100644
--- a/rubrique-dist.html
+++ b/rubrique-dist.html
@@ -124,7 +124,7 @@
 <div class="cartouche">
 [(#LOGO_RUBRIQUE|left)]
 <h1 class="titre-texte">#TITRE</h1>
-[Dernier ajout le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee).]
+[Dernier ajout le (#DATE|nom_jour)] [(#DATE|affdate).]
 </div>
 
 	<div class="encart">
@@ -194,7 +194,7 @@
 <BOUCLE_articles_recents(ARTICLES) {id_rubrique} {par titre}>
 	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
 	<div class="detail">
-	[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee)]
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
 	<B_auteurs_recents>par <BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_recents>
 	</div>
 	<br>
diff --git a/sommaire-dist.html b/sommaire-dist.html
index 4618dfe2f764a52c7fbd2773ff7227c60dd56bef..65481fce7da4ad012dc00ab3c259ead5d01bd6cb 100644
--- a/sommaire-dist.html
+++ b/sommaire-dist.html
@@ -95,7 +95,7 @@
 	<h2 class="titre-extrait"><a href="#URL_ARTICLE">#TITRE</a></h2>
 	[<div class="surtitre">(#SOUSTITRE)</div>]
 	<div class="detail">
-	[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee)]
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
 	<B_auteurs_un>par <BOUCLE_auteurs_un(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_un>
 	</div>
 	[<div class="texte"><div class="extrait">(#INTRODUCTION)</div></div>]
@@ -165,7 +165,7 @@
 <BOUCLE_articles_recents(ARTICLES) {par date} {inverse} {2,8}>
 	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
 	<div class="detail">
-	[Le (#DATE|nom_jour)] [(#DATE|jour)] [(#DATE|nom_mois)] [(#DATE|annee)]
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
 	<B_auteurs_recents>par <BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_recents>
 	</div>
 	<br>
diff --git a/spip_image.php3 b/spip_image.php3
index 2c8baf5a5104507be27223c9dc69fb33d0376620..60e2ddf1aaba74c0fb413b8eaf9dcf1c0a7b455c 100644
--- a/spip_image.php3
+++ b/spip_image.php3
@@ -281,8 +281,7 @@ function ajout_doc($orig, $source, $dest, $mode, $id_document, $doc_vignette='',
 	if (creer_repertoire('IMG', $ext))
 		$dest .= $ext.'/';
 	$dest .= ereg_replace("[^.a-zA-Z0-9_=-]+", "_",
-	nettoyer_chaine_indexation(ereg_replace("\.([^.]+)$", "",
-	basename($orig))));
+	nettoyer_chaine_indexation(ereg_replace("\.([^.]+)$", "", supprimer_tags(basename($orig)))));
 	$n = 0;
 	while (file_exists($newFile = $dest.($n++ ? '-'.$n : '').'.'.$ext));
 	$dest_path = $newFile;