diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index c8a52f0c7e324a8a93a7d832f47db5be11b90477..333fa4bb8663b33cd7d6841eaa9af5c1ba58e831 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -623,9 +623,9 @@ function compile_cas($tableau, $descr, &$boucles, $id_boucle) {
 // Si on la trouve, le tableau resultat a les entrees:
 // field (comme dans serial.php)
 // key (comme dans serial.php)
-// serveur = serveur bd associe
-// table = nom complet de la table (avec le prefixe spip_ pour les stds)
-// type = nom court (i.e. type de boucle)
+// table = nom SQL de la table (avec le prefixe spip_ pour les stds)
+// id_table = nom SPIP de la table (i.e. type de boucle)
+// le compilateur produit  FROM $r['table'] AS $r['id_table']
 
 // http://doc.spip.org/@trouver_table
 function trouver_table($type, $boucle)
@@ -640,32 +640,36 @@ function trouver_table($type, $boucle)
     	// indirection (pour les rares cas ou le nom de la table!=type)
 		$t = $table_des_tables[$type];
 		$nom_table = 'spip_' . $t;
-		if (!isset($connexions[$s]['tables'][$nom_table]))
+		if (!isset($connexions[$s]['tables'][$nom_table])) {
 			$connexions[$s]['tables'][$nom_table] = 
 				$tables_principales[$nom_table];
+			$connexions[$s]['tables'][$nom_table]['table']= $nom_table;
+			$connexions[$s]['tables'][$nom_table]['id_table']= $t;
+		}
 	} elseif ($spip AND isset($tables_auxiliaires['spip_' .$type])) {
 		$t = $type;
 		$nom_table = 'spip_' . $t;
-		if (!isset($connexions[$s]['tables'][$nom_table]))
+		if (!isset($connexions[$s]['tables'][$nom_table])) {
 			$connexions[$s]['tables'][$nom_table] = 
 				$tables_auxiliaires[$nom_table];
+			$connexions[$s]['tables'][$nom_table]['table']= $nom_table;
+			$connexions[$s]['tables'][$nom_table]['id_table']= $t;
+		}
 	} else	$nom_table = $t = $type;
-	spip_log("%%%% $t $nom_table " . isset($connexions[$s]['tables'][$nom_table]));
+
 	if (!isset($connexions[$s]['tables'][$nom_table])) {
 		$desc = sql_showtable($nom_table, $serveur, ($nom_table != $type));
 		if (!$desc OR !$desc['field']) {
 		  erreur_squelette(_T('zbug_table_inconnue', array('table' => $s ? "$serveur:$type" : $type)),
 					 $boucle->id_boucle);
 			return null;
+		} else {
+			$desc['table']= $nom_table;
+			$desc['id_table']= $t;
 		}
 		$connexions[$s]['tables'][$nom_table] = $desc;
-	} else $desc = $connexions[$s]['tables'][$nom_table];
-	
-	$desc['table']= $nom_table;
-	$desc['serveur']= $s;
-	$desc['type']= $t;
-
-	return $desc;
+	}
+	return $connexions[$s]['tables'][$nom_table];
 }
 
 // affichage du code produit
@@ -757,7 +761,7 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect='')
 			$show = trouver_table($type, $boucles[$id]);
 			if ($show) {
 				$nom_table = $show['table'];
-				$boucles[$id]->id_table = $show['type'];
+				$boucles[$id]->id_table = $show['id_table'];
 				$boucles[$id]->primary = $show['key']["PRIMARY KEY"];
 				$boucles[$id]->descr = &$descr;
 				if ((!$boucles[$id]->jointures)
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index d4ad437d0a43eaa4cb0c53239cb2b48ad9f46303..3a754b1ee1407f7ca810ff30159b432d4f17110f 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -436,8 +436,8 @@ function critere_par_jointure(&$boucle, $join)
   if (!$t) {
 	$type = $boucle->type_requete;
 	$desc = trouver_table($type, $boucle);
-
 	$cle = trouver_champ_exterieur($champ, $boucle->jointures, $boucle);
+
 	if ($cle)
 		$cle = calculer_jointure($boucle, array($desc['table'], $desc), $cle, false);
 	if ($cle) $t = "L$cle"; 
diff --git a/ecrire/public/parametrer.php b/ecrire/public/parametrer.php
index 585c5080a03de37490fd8e5be58f5e786dc9d096..7314b1c3df47e8372e36d5feb46230d5d3a63ddb 100644
--- a/ecrire/public/parametrer.php
+++ b/ecrire/public/parametrer.php
@@ -252,9 +252,10 @@ function generer_generer_url($type, $p)
 
 	if (!$s)
 		return "generer_url_$type($_id)";
-	elseif (!$GLOBALS['connexions'][$s]['spip_connect_version'])
-		return calculer_champ($p);
-	else {
+	elseif (!$GLOBALS['connexions'][$s]['spip_connect_version']) {
+		erreur_squelette("#URL_" . strtoupper($type). ' ' . _T('zbug_distant_interdit'));
+		return "";
+	} else {
 		$u = "quete_meta('adresse_site', '$s')";
 		if ($type != 'document')
 			return "$u . '?page=$type&id_$type=' . " . $_id;
diff --git a/ecrire/public/references.php b/ecrire/public/references.php
index 88d070e54726e2ea19cdc5fe89be5d9e38dc5d68..43fd80d24ac955f836193e357a17104b7a91f397 100644
--- a/ecrire/public/references.php
+++ b/ecrire/public/references.php
@@ -65,13 +65,13 @@ function index_tables_en_pile($idb, $nom_champ, &$boucles) {
 	$r = $boucles[$idb]->type_requete;
 
 	if ($r == 'boucle') return array();
-	$desc = trouver_table($r, $boucle);
+	$desc = trouver_table($r, $boucles[$idb]);
 	if(!$desc) {
 		# continuer pour chercher l'erreur suivante
 		return  array("'#" . $r . ':' . $nom_champ . "'",'');
 	}
 
-	$t= $desc['type'];
+	$t= $desc['id_table'];
 	$excep = isset($exceptions_des_tables[$r]) ? $exceptions_des_tables[$r] : '';
 	if ($excep)
 		$excep = isset($excep[$nom_champ]) ? $excep[$nom_champ] : '';
@@ -123,7 +123,7 @@ function index_exception(&$boucle, $desc, $nom_champ, $excep)
 				}
 		}
 	} 
-	else $t = $desc['type'];
+	else $t = $desc['id_table'];
 	// demander a SQL de gerer le synonyme
 	// ca permet que excep soit dynamique (Cedric, 2/3/06)
 	if ($excep != $nom_champ) $excep .= ' AS '. $nom_champ;