diff --git a/ecrire/exec/mots_edit.php b/ecrire/exec/mots_edit.php
index 0aff5e15b5e4335e0e4e53becf458bd558486a9c..9e76f2306c91de1d91bf4d3ab4ffe2430c721799 100644
--- a/ecrire/exec/mots_edit.php
+++ b/ecrire/exec/mots_edit.php
@@ -33,6 +33,7 @@ global
   $redirect,
   $redirect_ok,
   $supp_mot,
+  $spip_display,
   $table,
   $texte,
   $titre,
@@ -102,17 +103,18 @@ if ($redirect_ok == 'oui' && $redirect) {
 //
 // Recupere les donnees
 //
-$result = spip_query("SELECT * FROM spip_mots WHERE id_mot='$id_mot'");
-
-if ($row = spip_fetch_array($result)) {
-	$id_mot = $row['id_mot'];
-	$titre_mot = $row['titre'];
-	$descriptif = $row['descriptif'];
-	$texte = $row['texte'];
-	$type = $row['type'];
-	$extra = $row['extra'];
-	$id_groupe = $row['id_groupe'];
- } else $id_mot = 0;
+ if ($id_mot) {
+	$row = spip_fetch_array(spip_query("SELECT * FROM spip_mots WHERE id_mot=$id_mot"));
+	 if ($row) {
+		$id_mot = $row['id_mot'];
+		$titre_mot = $row['titre'];
+		$descriptif = $row['descriptif'];
+		$texte = $row['texte'];
+		$type = $row['type'];
+		$extra = $row['extra'];
+		$id_groupe = $row['id_groupe'];
+	 } else $id_mot = 0;
+ }
 
 debut_page("« $titre_mot »", "documents", "mots");
 debut_gauche();
@@ -147,13 +149,11 @@ if ($id_mot > 0 AND $connect_statut == '0minirezo'  AND $connect_toutes_rubrique
 //
 debut_raccourcis();
 
-if ($connect_statut == '0minirezo'  AND $connect_toutes_rubriques) {
-		icone_horizontale(_T('icone_modif_groupe_mots'), generer_url_ecrire("mots_type","id_groupe=$id_groupe"), "groupe-mot-24.gif", "edit.gif");
-		icone_horizontale(_T('icone_creation_mots_cles'), generer_url_ecrire("mots_edit", "new=oui&id_groupe=$id_groupe&redirect=" . rawurlencode(generer_url_ecrire('mots_tous'))), 
-				  "mot-cle-24.gif",
-				  "creer.gif");
+ if ($connect_statut == '0minirezo'  AND $connect_toutes_rubriques AND $id_groupe) {
+	icone_horizontale(_T('icone_modif_groupe_mots'), generer_url_ecrire("mots_type","id_groupe=$id_groupe"), "groupe-mot-24.gif", "edit.gif");
+	icone_horizontale(_T('icone_creation_mots_cles'), generer_url_ecrire("mots_edit", "new=oui&id_groupe=$id_groupe&redirect=" . rawurlencode(generer_url_ecrire('mots_tous'))),  "mot-cle-24.gif",  "creer.gif");
  }
-icone_horizontale(_T('icone_voir_tous_mots_cles'), generer_url_ecrire("mots_tous",""), "mot-cle-24.gif", "rien.gif");
+ icone_horizontale(_T('icone_voir_tous_mots_cles'), generer_url_ecrire("mots_tous",""), "mot-cle-24.gif", "rien.gif");
 
 fin_raccourcis();
 
@@ -243,30 +243,7 @@ if ($connect_statut =="0minirezo"  AND $connect_toutes_rubriques){
 
 	echo "<BR><input type='text' NAME='titre_mot' CLASS='formo' VALUE=\"$titre_mot\" SIZE='40' $onfocus />";
 
-	// dans le groupe...
-	$result = spip_query("SELECT id_groupe, titre FROM spip_groupes_mots ORDER BY titre");
-
-	if (spip_num_rows($result)>1) {
-		debut_cadre_relief("groupe-mot-24.gif");
-		echo  _T('info_dans_groupe')."</label>\n";
-		echo aide ("motsgroupes");
-		echo  " &nbsp; <SELECT NAME='id_groupe' class='fondl'>\n";
-		while ($row_groupes = spip_fetch_array($result)){
-			$groupe = $row_groupes['id_groupe'];
-			$titre_groupe = texte_backend(supprimer_tags(typo($row_groupes['titre'])));
-			echo  "<OPTION".mySel($groupe, $id_groupe).">$titre_groupe</OPTION>\n";
-		}			
-		echo  "</SELECT>";
-		fin_cadre_relief();
-	} else {
-		$row_groupes = spip_fetch_array($result);
-		if (!$row_groupes) {
-			// il faut creer un groupe de mots (cas d'un mot cree depuis le script articles)
-		  $titre = _T('info_mot_sans_groupe');
-		  $row_groupes['id_groupe'] = spip_abstract_insert("spip_groupes_mots", "(titre, unseul, obligatoire, articles, breves, rubriques, syndic, minirezo, comite, forum)", "(" . spip_abstract_quote($titre) . ", 'non',  'non', 'oui', 'oui', 'non', 'oui', 'oui', 'non', 'non'" . ")");
-		}
-		echo "<input type='hidden' name='id_groupe' value='".$row_groupes['id_groupe']."'>";
-	}
+	determine_groupe_mots($table, $id_groupe);
 
 	if ($options == 'avancees' OR $descriptif) {
 		echo "<B>"._T('texte_descriptif_rapide')."</B><BR>";
@@ -297,13 +274,41 @@ if ($connect_statut =="0minirezo"  AND $connect_toutes_rubriques){
 	echo "</FORM>";
 
 	fin_cadre_formulaire();
-}
-
+ }
 
 fin_page();
 }
 
 
+function determine_groupe_mots($table, $id_groupe) {
+
+	$result = spip_query("SELECT id_groupe, titre FROM spip_groupes_mots ". ($table ? "WHERE $table='oui'" : '') . " ORDER BY titre");
+
+	echo  _T('info_dans_groupe'), aide("motsgroupes");
+	debut_cadre_relief("groupe-mot-24.gif");
+	if (spip_num_rows($result)>1) {
+
+		echo  " &nbsp; <SELECT NAME='id_groupe' class='fondl'>\n";
+		while ($row_groupes = spip_fetch_array($result)){
+			$groupe = $row_groupes['id_groupe'];
+			$titre_groupe = texte_backend(supprimer_tags(typo($row_groupes['titre'])));
+			echo  "<OPTION".mySel($groupe, $id_groupe).">$titre_groupe</OPTION>\n";
+		}			
+		echo  "</SELECT>";
+	} else {
+		$row_groupes = spip_fetch_array($result);
+		if (!$row_groupes) {
+			// il faut creer un groupe de mots (cas d'un mot cree depuis le script articles)
+
+			$titre = _T('info_mot_sans_groupe');
+		  	$row_groupes['id_groupe'] = spip_abstract_insert("spip_groupes_mots", "(titre, unseul, obligatoire, articles, breves, rubriques, syndic, minirezo, comite, forum)", "(" . spip_abstract_quote($titre) . ", 'non',  'non', '" . (($table=='articles') ? 'oui' : 'non') ."', '" . (($table=='breves') ? 'oui' : 'non') ."','" . (($table=='rubriques') ? 'oui' : 'non') ."','" . (($table=='syndic') ? 'oui' : 'non') ."', 'oui', 'non', 'non'" . ")");
+		} else $titre = $row_groupes['titre'];
+		echo $titre, '<br />';
+		echo "<input type='hidden' name='id_groupe' value='".$row_groupes['id_groupe']."' />";
+	}
+	fin_cadre_relief();
+}
+
 function un_seul_mot_dans_groupe($id_groupe)
 {
 	$u = spip_fetch_array(spip_query("SELECT unseul FROM spip_groupes_mots WHERE id_groupe = $id_groupe"));
diff --git a/ecrire/inc/mots.php b/ecrire/inc/mots.php
index a35ff3b60d2c191f370b2dfc8b3394c2ad9c0534..415ed4e7839ae2e8f1c9b58bb7310dcdfad8f8e6 100644
--- a/ecrire/inc/mots.php
+++ b/ecrire/inc/mots.php
@@ -136,7 +136,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 		if (!$flag_editable) return;
 		$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM spip_groupes_mots WHERE $table = 'oui'	AND ".substr($connect_statut,1)." = 'oui'"));
 
-		if (!$cpt['n']) return;
+		if (!$cpt['n'] AND !$flag_editable) return;
 	}
 
 	echo "<a name='mots'></a>";
@@ -153,19 +153,20 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 	//
 
 	$nouveaux_mots = $nouv_mot ? array($nouv_mot) : array();
-
 	$tous_les_mots = split(" *[,;] *", $cherche_mot);
 	while ((list(,$cherche_mot) = each ($tous_les_mots)) AND $cherche_mot) {
 		echo "<P ALIGN='left'>";
 		$result = spip_query("SELECT id_mot, titre FROM spip_mots WHERE id_groupe=" . intval($GLOBALS['select_groupe']));
 
-		unset($table_mots);
-		unset($table_ids);
+		$table_mots = array();
+		$table_ids = array();
 		while ($row = spip_fetch_array($result)) {
 			$table_ids[] = $row['id_mot'];
 			$table_mots[] = $row['titre'];
 		}
+
 		$resultat = mots_ressemblants($cherche_mot, $table_mots, $table_ids);
+
 		debut_boite_info();
 		if (!$resultat) {
 			echo "<B>"._T('info_non_resultat', array('cherche_mot' => $cherche_mot))."</B><BR>";
@@ -192,40 +193,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 			}
 			echo "</UL>";
 		}
-		else {
-			reset($resultat);
-			unset($les_mots);
-			while (list(, $id_mot) = each($resultat)
-			AND $nombre ++ < 17)
-				$les_mots[] = $id_mot;
-			if ($les_mots) {
-				if (count($resultat) > 17) {
-					echo "<br /><b>"._T('info_trop_resultat', array('cherche_mot' => $cherche_mot))."</b><p />\n";
-				}
-				$les_mots = join(',', $les_mots);
-				echo "<B>"._T('info_plusieurs_mots_trouves', array('cherche_mot' => $cherche_mot))."</B><BR>";
-				$result = spip_query("SELECT * FROM spip_mots WHERE id_mot IN ($les_mots) ORDER BY titre");
-
-				echo "<UL>";
-				while ($row = spip_fetch_array($result)) {
-					$id_mot = $row['id_mot'];
-					$titre_mot = $row['titre'];
-					$type_mot = typo($row['type']);
-					$descriptif_mot = $row['descriptif'];
-
-					echo "<LI><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=2><B><FONT SIZE=3>".typo($titre_mot)."</FONT></B>";
-
-					if ($type_mot) echo " ($type_mot)";
-					echo " | <A href='", generer_url_ecrire($url_base, "$table_id=$id_objet&nouv_mot=$id_mot#mots"), "'>",_T('info_ajouter_mot'),"</A>";
-
-					if (strlen($descriptif_mot) > 1) {
-						echo "<BR><FONT SIZE=1>".propre(couper($descriptif_mot, 100))."</FONT>\n";
-					}
-					echo "</FONT><p>\n";
-				}
-				echo "</UL>";
-			}
-		}
+		else affiche_mots_ressemblant($cherche_mot, $id_objet, $resultat, $table_id, $url_base);
 
 		if ($GLOBALS['connect_statut'] == '0minirezo'
 		     AND $connect_toutes_rubriques ) {
@@ -251,7 +219,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 			$result = spip_query("SELECT * FROM spip_mots_$table WHERE id_mot=$nouv_mot AND $table_id=$id_objet");
 
 			if (!spip_num_rows($result)) {
-				$result = spip_query("INSERT INTO spip_mots_$table (id_mot,$table_id) VALUES ($nouv_mot, $id_objet)");
+				spip_query("INSERT INTO spip_mots_$table (id_mot,$table_id) VALUES ($nouv_mot, $id_objet)");
 
 			}
 		}
@@ -273,6 +241,46 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 	//
 	// Afficher les mots-cles
 	//
+	$visible = $nouveaux_mots||$cherche_mot||$supp_mot;
+
+	afficher_mots_cles($flag_editable, $id_objet, $retour, $table, $table_id, $url_base, $visible);
+	fin_cadre_enfonce();
+}
+
+function affiche_mots_ressemblant($cherche_mot, $id_objet, $resultat, $table_id, $url_base)
+{
+	if (count($resultat) > 17)
+		echo "<br /><b>",_T('info_trop_resultat', array('cherche_mot' => $cherche_mot)),"</b><p />\n";
+				
+	$les_mots = join(',', $resultat);
+	echo "<B>",_T('info_plusieurs_mots_trouves', array('cherche_mot' => $cherche_mot)),"</B><BR>";
+	$result = spip_query("SELECT * FROM spip_mots WHERE id_mot IN ($les_mots) ORDER BY titre LIMIT 17");
+
+	echo "<UL>";
+	while ($row = spip_fetch_array($result)) {
+		$id_mot = $row['id_mot'];
+		$titre_mot = $row['titre'];
+		$type_mot = typo($row['type']);
+		$descriptif_mot = $row['descriptif'];
+
+		echo "<li><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE='2'><B><FONT SIZE='3'>",typo($titre_mot),"</FONT></B>";
+
+		if ($type_mot) echo " ($type_mot)";
+		echo " | <A href='", generer_url_ecrire($url_base, "$table_id=$id_objet&nouv_mot=$id_mot#mots"), "'>",_T('info_ajouter_mot'),"</A>";
+
+		if (strlen($descriptif_mot) > 1) {
+			echo "<br /><FONT SIZE=1>".propre(couper($descriptif_mot, 100))."</FONT>\n";
+		}
+		echo "</FONT></li>>\n";
+	}
+	echo "</UL>";
+}
+
+
+function afficher_mots_cles($flag_editable, $id_objet, $retour, $table, $table_id, $url_base, $visible)
+{
+	global $spip_lang_rtl, $spip_lang, $spip_lang_right, $connect_statut, $connect_toutes_rubriques, $options;
+
 
 	$les_mots = array();
 	$id_groupes_vus = array();
@@ -299,10 +307,8 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 			
 
 			$row_groupe = spip_fetch_array(spip_query("SELECT titre, unseul, obligatoire, minirezo, comite FROM spip_groupes_mots WHERE id_groupe = $id_groupe"));
-			$titre_groupe = entites_html($row_groupe['titre']);
 	// On recupere le typo_mot ici, et non dans le mot-cle lui-meme; sinon bug avec arabe
 			$type_mot = typo($row_groupe['titre']);
-			$obligatoire = $row_groupe['obligatoire'];
 			$flag_groupe = (($connect_statut == '1comite' AND $row_groupe['comite'] == 'oui') OR ($connect_statut == '0minirezo' AND $row_groupe['minirezo'] == 'oui'));
 			// Changer
 			if (($row_groupe['unseul'] == "oui") AND ($flag_editable AND $flag_groupe)) {
@@ -358,18 +364,17 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 		$les_mots = "0";
 		$nombre_mots_associes = 0;
 	}
-	if ($id_groupes_vus) $id_groupes_vus = join($id_groupes_vus, ",");
-	else $id_groupes_vus = "0";
-
-	$nb_groupes = spip_num_rows(spip_query("SELECT * FROM spip_groupes_mots WHERE $table = 'oui' AND ".substr($connect_statut,1)." = 'oui' AND obligatoire = 'oui' AND id_groupe NOT IN ($id_groupes_vus)"));
-
 
 	//
 	// Afficher le formulaire d'ajout de mots-cles
 	//
 
 	if ($flag_editable) {
-		if ($nouveaux_mots||$cherche_mot||$supp_mot)
+		if ($id_groupes_vus) $id_groupes_vus = join($id_groupes_vus, ",");
+		else $id_groupes_vus = "0";
+		$nb_groupes = spip_num_rows(spip_query("SELECT * FROM spip_groupes_mots WHERE $table = 'oui' AND ".substr($connect_statut,1)." = 'oui' AND obligatoire = 'oui' AND id_groupe NOT IN ($id_groupes_vus)"));
+
+		if ($visible)
 			echo debut_block_visible("lesmots");
 		else if ($nb_groupes > 0) {
 			echo debut_block_visible("lesmots");
@@ -409,7 +414,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 				$message_ajouter_mot = "";
 		}
 		
-		if ($connect_statut == '0minirezo' AND $flag_editable AND $options == "avancees" AND $connect_toutes_rubriques) {
+		if ($connect_statut == '0minirezo' AND $options == "avancees" AND $connect_toutes_rubriques) {
 			echo "<tr><td></td><td colspan='2'>";
 			echo "<div style='width: 200px;'>";
 			icone_horizontale(_T('icone_creer_mot_cle'), generer_url_ecrire("mots_edit","new=oui&ajouter_id_article=$id_objet&table=$table&table_id=$table_id&redirect=$retour"), "mot-cle-24.gif", "creer.gif");
@@ -420,8 +425,6 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 		echo "</table>";
 		echo fin_block();
 	}
-
-	fin_cadre_enfonce();
 }
 
 function menu_mots($row, $form_mot, $groupes_vus, $les_mots, $message_ajouter_mot)