diff --git a/ecrire/genie/maintenance.php b/ecrire/genie/maintenance.php
index 41079bbe02d7b22c2548197b0a7c91991cbcb27d..432d913ed863a8a4544928c3590010f2b3037e23 100644
--- a/ecrire/genie/maintenance.php
+++ b/ecrire/genie/maintenance.php
@@ -10,6 +10,12 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
+/**
+ * Gestion des différentes tâches de maintenance
+ *
+ * @package SPIP\Core\Genie\Maintenance
+ */
+
 if (!defined('_ECRIRE_INC_VERSION')) return;
 
 /**
diff --git a/ecrire/genie/mise_a_jour.php b/ecrire/genie/mise_a_jour.php
index 9b4cd5b1d918976285981094c447a4e0eabe649c..b80e56b02788a170bab196fac0f1ef86a5722417 100644
--- a/ecrire/genie/mise_a_jour.php
+++ b/ecrire/genie/mise_a_jour.php
@@ -10,6 +10,12 @@
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
 \***************************************************************************/
 
+/**
+ * Vérification en tâche de fond des différentes mise à jour.
+ *
+ * @package SPIP\Core\Genie\Mise_a_jour
+ */
+
 if (!defined('_ECRIRE_INC_VERSION')) return;
 
 /**
diff --git a/ecrire/genie/optimiser.php b/ecrire/genie/optimiser.php
index 5b5d3031e41f23a48c169482d7c829a94313e4e6..cdcfc3fc542d7fb2ce2ca823b36a096d1d21e2be 100644
--- a/ecrire/genie/optimiser.php
+++ b/ecrire/genie/optimiser.php
@@ -212,4 +212,8 @@ function optimiser_base_disparus($attente = 86400) {
 	
 	if (!$n) spip_log("Optimisation des tables: aucun lien mort");
 }
-?>
+/**
+ * Gestion des optimisations de la base de données en cron 
+ *
+ * @package SPIP\Core\Genie\Optimiser
+**/
diff --git a/ecrire/inc/editer.php b/ecrire/inc/editer.php
index 0e63fecdf53f9f3830836433fa78fc54f74c36c5..219b8f610cc4c1ee768376337d849b0dac07c254 100644
--- a/ecrire/inc/editer.php
+++ b/ecrire/inc/editer.php
@@ -267,11 +267,13 @@ function formulaires_editer_objet_charger($type, $id='new', $id_parent=0, $lier_
 	return $contexte;
 }
 
-//
-// Gestion des textes trop longs (limitation brouteurs)
-// utile pour les textes > 32ko
-
-// http://doc.spip.org/@coupe_trop_long
+/**
+ * Gestion des textes trop longs (limitation brouteurs)
+ * utile pour les textes > 32ko
+ * 
+ * @param  string  $texte
+ * @return array
+ */
 function coupe_trop_long($texte){
 	$aider = charger_fonction('aider', 'inc');
 	if (strlen($texte) > 28*1024) {
@@ -297,7 +299,13 @@ function coupe_trop_long($texte){
 		return (array($texte,''));
 }
 
-// http://doc.spip.org/@editer_texte_recolle
+/**
+ * Formater un `$texte` dans `textarea`
+ *
+ * @param string $texte
+ * @param string $att_text
+ * @return array
+ */
 function editer_texte_recolle($texte, $att_text)
 {
 	if ((strlen($texte)<29*1024)
@@ -337,19 +345,17 @@ function titre_automatique($champ_titre,$champs_contenu,$longueur=null){
 }
 
 /**
- * Determiner un titre automatique,
- * a partir des champs textes de contenu
+ * Déterminer un titre automatique,
+ * à partir des champs textes de contenu
  *
- * Les textes et le titre sont pris dans les champs postés (via _request())
+ * Les textes et le titre sont pris dans les champs postés (via `_request()`)
  * et le titre calculé est de même affecté en tant que champ posté.
  * 
- * @param string $champ_titre
- *     Nom du champ titre
  * @param array $champs_contenu
  *     Liste des champs contenu textuels
  * @param array|null $c
  *   tableau qui contient les valeurs des champs de contenu
- *   si null on utilise les valeurs du POST
+ *   si `null` on utilise les valeurs du POST
  * @param int $longueur
  *     Longueur de coupe du texte
  * @return string
@@ -596,7 +602,14 @@ function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') {
 	return $conflits;
 }
 
-// http://doc.spip.org/@display_conflit_champ
+/**
+ * Afficher le contenu d'un champ selon sa longueur
+ * soit dans un `textarea`, soit dans un `input`
+ *
+ * @param string $x 
+ *         texte à afficher
+ * @return string
+ */
 function display_conflit_champ($x) {
 	if (strstr($x, "\n") OR strlen($x)>80)
 		return "<textarea style='width:99%; height:10em;'>".entites_html($x)."</textarea>\n";
@@ -604,7 +617,20 @@ function display_conflit_champ($x) {
 		return "<input type='text' size='40' style='width:99%' value=\"".entites_html($x)."\" />\n";
 }
 
-// http://doc.spip.org/@signaler_conflits_edition
+/**
+ * Signaler une erreur entre 2 saisies d'un champ
+ * 
+ * @uses preparer_diff()
+ * @uses propre_diff()
+ * @uses afficher_para_modifies()
+ * @uses afficher_diff()
+ * @uses minipres()
+ * 
+ * @param array $conflits
+ *     Valeur des champs en conflit
+ * @param string $redirect
+ * @return string
+ */
 function signaler_conflits_edition($conflits, $redirect='') {
 	include_spip('inc/minipres');
 	include_spip('inc/revisions');
@@ -675,4 +701,8 @@ function signaler_conflits_edition($conflits, $redirect='') {
 	);
 }
 
-?>
+/**
+ * Fonctions d'aide à l'édition d'objets éditoriaux. 
+ *
+ * @package SPIP\Core\Edition
+**/
diff --git a/ecrire/inc/envoyer_mail.php b/ecrire/inc/envoyer_mail.php
index d068df984fa25a563a9baee2d03615103d5b84cc..0d7b5ee4f158a10545fcef9f72149fe5768d6580 100644
--- a/ecrire/inc/envoyer_mail.php
+++ b/ecrire/inc/envoyer_mail.php
@@ -20,12 +20,30 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
 include_spip('inc/charsets');
 include_spip('inc/texte');
 
-// http://doc.spip.org/@nettoyer_titre_email
+/**
+ * Nettoyer le titre d'un email
+ *
+ * @uses textebrut()
+ * @uses corriger_typo()
+ *
+ * @param  string $titre
+ * @return string
+ */
 function nettoyer_titre_email($titre) {
 	return str_replace("\n", ' ', textebrut(corriger_typo($titre)));
 }
 
-// http://doc.spip.org/@nettoyer_caracteres_mail
+/**
+ * Utiliser le bon encodage de caractères selon le charset
+ *
+ * Caractères pris en compte : apostrophe, double guillemet,
+ * le tiret cadratin, le tiret demi-cadratin
+ *
+ * @uses filtrer_entites()
+ *
+ * @param string $t
+ * @return string
+ */
 function nettoyer_caracteres_mail($t) {
 
 	$t = filtrer_entites($t);
@@ -145,7 +163,16 @@ function inc_envoyer_mail_dist($destinataire, $sujet, $corps, $from = "", $heade
 
 	return @mail($destinataire, $sujet, $texte, $headers);
 }
-
+/**
+ * Formater correctement l'entête d'un email
+ * 
+ * @param string $headers
+ * @param string $from   
+ * @param string $to     
+ * @param string $texte  
+ * @param string $parts  
+ * @return array
+ */
 function mail_normaliser_headers($headers, $from, $to, $texte, $parts="")
 {
 	$charset = $GLOBALS['meta']['charset'];
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index f43e5018b4c76112478f0347eca49dcf6f5820a4..39e73857dbe9f8cee5c83aec968e3494469268eb 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -597,13 +597,14 @@ function test_plugin_actif($plugin){
  *     ```
  *     _T('bouton_enregistrer')
  *     _T('medias:image_tourner_droite')
- *     _T('medias:erreurs', array('nb'=>3)
+ *     _T('medias:erreurs', array('nb'=>3))
+ *     _T("email_sujet", array('spip_lang'=>$lang_usager))
  *     ```
  *
  * @param string $texte
  *     Clé de traduction
  * @param array $args
- *     Couples (variable => valeur) pour passer des variables à la chaîne traduite
+ *     Couples (variable => valeur) pour passer des variables à la chaîne traduite. la variable spip_lang permet de forcer la langue
  * @param array $options
  *     - string class : nom d'une classe a ajouter sur un span pour encapsuler la chaine
  *     - bool force : forcer un retour meme si la chaine n'a pas de traduction