Index: gc_lang/fr/modules-js/cregex.js
==================================================================
--- gc_lang/fr/modules-js/cregex.js
+++ gc_lang/fr/modules-js/cregex.js
@@ -7,12 +7,10 @@
 var cregex = {
     ///// Lemme
     _zLemma: new RegExp(">([a-zà-öø-ÿ0-9Ā-ʯ][a-zà-öø-ÿ0-9Ā-ʯ-]+)"),
 
     ///// Masculin / féminin / singulier / pluriel
-    _zGender: new RegExp(":[mfe]"),
-    _zNumber: new RegExp(":[spi]"),
     _zGenderNumber: new RegExp(":[mfe]:[spi]"),
 
     ///// Nom et adjectif
     _zNA: new RegExp(":[NA]"),
 
@@ -29,11 +27,11 @@
     _zNAe: new RegExp(":[NA].*:e"),
     _zNAme: new RegExp(":[NA].*:[me]"),
     _zNAfe: new RegExp(":[NA].*:[fe]"),
 
     //// nombre et genre
-    // singuilier
+    // singulier
     _zNAms: new RegExp(":[NA].*:m.*:s"),
     _zNAfs: new RegExp(":[NA].*:f.*:s"),
     _zNAes: new RegExp(":[NA].*:e.*:s"),
     _zNAmes: new RegExp(":[NA].*:[me].*:s"),
     _zNAfes: new RegExp(":[NA].*:[fe].*:s"),
@@ -86,68 +84,26 @@
     getLemmaOfMorph: function (sMorph) {
         return this._zLemma.exec(sMorph)[1];
     },
 
     agreement: function (l1, l2) {
-        // check number agreement
-        if (!this.mbInv(l1) && !this.mbInv(l2)) {
-            if (this.mbSg(l1) && !this.mbSg(l2)) {
-                return false;
-            }
-            if (this.mbPl(l1) && !this.mbPl(l2)) {
-                return false;
-            }
-        }
-        // check gender agreement
-        if (this.mbEpi(l1) || this.mbEpi(l2)) {
-            return true;
-        }
-        if (this.isMas(l1) && !this.mbMas(l2)) {
-            return false;
-        }
-        if (this.isFem(l1) && !this.mbFem(l2)) {
+        // returns True if agreement in gender and number is possible between morphologies <l1> and <l2>
+        let [sGender1, sNumber1] = this.getGenderNumber(l1);
+        let [sGender2, sNumber2] = this.getGenderNumber(l2);
+        if (sNumber1 !== ":i" && sNumber2 !== ":i" && sNumber1 !== sNumber2) {
+            return false;
+        }
+        if (sGender1 !== ":e" && sGender2 !== ":e" && sGender1 !== sGender2) {
             return false;
         }
         return true;
     },
 
     checkConjVerb: function (lMorph, sReqConj) {
         return lMorph.some(s  =>  s.includes(sReqConj));
     },
 
-    getGender: function (lMorph) {
-        // returns gender of word (':m', ':f', ':e' or empty string).
-        let sGender = "";
-        for (let sMorph of lMorph) {
-            let m = this._zGender.exec(sMorph);
-            if (m) {
-                if (!sGender) {
-                    sGender = m[0];
-                } else if (sGender != m[0]) {
-                    return ":e";
-                }
-            }
-        }
-        return sGender;
-    },
-
-    getNumber: function (lMorph) {
-        // returns number of word (':s', ':p', ':i' or empty string).
-        let sNumber = "";
-        for (let sMorph of lMorph) {
-            let m = this._zNumber.exec(sMorph);
-            if (m) {
-                if (!sNumber) {
-                    sNumber = m[0];
-                } else if (sNumber != m[0]) {
-                    return ":i";
-                }
-            }
-        }
-        return sNumber;
-    },
-
     getGenderNumber: function (lMorph) {
         // returns tuple (gender, number) of word: (':m', ':f', ':e' or empty string) and (':s', ':p', ':i' or empty string)
         let sGender = "";
         let sNumber = "";
         for (let sMorph of lMorph) {
@@ -297,12 +253,10 @@
 };
 
 
 if (typeof(exports) !== 'undefined') {
     exports._zLemma = cregex._zLemma;
-    exports._zGender = cregex._zGender;
-    exports._zNumber = cregex._zNumber;
     exports._zNA = cregex._zNA;
     exports._zNAs = cregex._zNAs;
     exports._zNAp = cregex._zNAp;
     exports._zNAi = cregex._zNAi;
     exports._zNAsi = cregex._zNAsi;
@@ -342,14 +296,13 @@
     exports._zNP = cregex._zNP;
     exports._zNPm = cregex._zNPm;
     exports._zNPf = cregex._zNPf;
     exports._zNPe = cregex._zNPe;
     exports.getLemmaOfMorph = cregex.getLemmaOfMorph;
-    exports.checkAgreement = cregex.checkAgreement;
+    exports.agreement = cregex.agreement;
+    exports.getGenderNumber = cregex.getGenderNumber;
     exports.checkConjVerb = cregex.checkConjVerb;
-    exports.getGender = cregex.getGender;
-    exports.getNumber = cregex.getNumber;
     exports.isNom = cregex.isNom;
     exports.isNomNotAdj = cregex.isNomNotAdj;
     exports.isAdj = cregex.isAdj;
     exports.isNomAdj = cregex.isNomAdj;
     exports.isNomVconj = cregex.isNomVconj;

Index: gc_lang/fr/modules-js/gce_analyseur.js
==================================================================
--- gc_lang/fr/modules-js/gce_analyseur.js
+++ gc_lang/fr/modules-js/gce_analyseur.js
@@ -51,12 +51,12 @@
     let lMorph1 = gc_engine.oSpellChecker.getMorph(sWord1);
     let lMorph2 = gc_engine.oSpellChecker.getMorph(sWord2);
     if (lMorph1.length == 0 || lMorph2.length == 0) {
         return ":N:e:p";
     }
-    let sGender1 = cregex.getGender(lMorph1);
-    let sGender2 = cregex.getGender(lMorph2);
+    let [sGender1, ] = cregex.getGenderNumber(lMorph1);
+    let [sGender2, ] = cregex.getGenderNumber(lMorph2);
     if (sGender1 == ":m" || sGender2 == ":m") {
         return ":N:m:p";
     }
     if (sGender1 == ":f" || sGender2 == ":f") {
         return ":N:f:p";

Index: gc_lang/fr/modules/cregex.py
==================================================================
--- gc_lang/fr/modules/cregex.py
+++ gc_lang/fr/modules/cregex.py
@@ -6,12 +6,10 @@
 
 #### Lemme
 Lemma = re.compile(r"^>(\w[\w-]*)")
 
 #### Analyses
-Gender = re.compile(":[mfe]")
-Number = re.compile(":[spi]")
 GenderNumber = re.compile(":[mfe]:[spi]")
 
 #### Nom et adjectif
 NA = re.compile(":[NA]")
 
@@ -86,53 +84,22 @@
     "return lemma in morphology <s>"
     return Lemma.search(s).group(1)
 
 def agreement (l1, l2):
     "returns True if agreement in gender and number is possible between morphologies <l1> and <l2>"
-    # check number agreement
-    if not mbInv(l1) and not mbInv(l2):
-        if mbSg(l1) and not mbSg(l2):
-            return False
-        if mbPl(l1) and not mbPl(l2):
-            return False
-    # check gender agreement
-    if mbEpi(l1) or mbEpi(l2):
-        return True
-    if isMas(l1) and not mbMas(l2):
-        return False
-    if isFem(l1) and not mbFem(l2):
+    sGender1, sNumber1 = getGenderNumber(l1)
+    sGender2, sNumber2 = getGenderNumber(l2)
+    if sNumber1 != ":i" and sNumber2 != ":i" and sNumber1 != sNumber2:
+        return False
+    if sGender1 != ":e" and sGender2 != ":e" and sGender1 != sGender2:
         return False
     return True
 
 def checkConjVerb (lMorph, sReqConj):
     "returns True if <sReqConj> in <lMorph>"
     return any(sReqConj in s  for s in lMorph)
 
-def getGender (lMorph):
-    "returns gender of word (':m', ':f', ':e' or empty string)."
-    sGender = ""
-    for sMorph in lMorph:
-        m = Gender.search(sMorph)
-        if m:
-            if not sGender:
-                sGender = m.group(0)
-            elif sGender != m.group(0):
-                return ":e"
-    return sGender
-
-def getNumber (lMorph):
-    "returns number of word (':s', ':p', ':i' or empty string)."
-    sNumber = ""
-    for sMorph in lMorph:
-        m = Number.search(sMorph)
-        if m:
-            if not sNumber:
-                sNumber = m.group(0)
-            elif sNumber != m.group(0):
-                return ":i"
-    return sNumber
-
 def getGenderNumber (lMorph):
     "returns tuple (gender, number) of word: (':m', ':f', ':e' or empty string) and (':s', ':p', ':i' or empty string)"
     sGender = ""
     sNumber = ""
     for sMorph in lMorph:

Index: gc_lang/fr/modules/gce_analyseur.py
==================================================================
--- gc_lang/fr/modules/gce_analyseur.py
+++ gc_lang/fr/modules/gce_analyseur.py
@@ -41,17 +41,18 @@
         return True
     if 1 < len(s) < 16 and s[0:1].islower() and (not s[1:].islower() or _zUnitNumbers.search(s)):
         return True
     return False
 
-def queryNamesPOS(sWord1, sWord2):
+def queryNamesPOS (sWord1, sWord2):
+    "returns POS tag for <sWord1> and <sWord2> as a whole"
     lMorph1 = _oSpellChecker.getMorph(sWord1)
     lMorph2 = _oSpellChecker.getMorph(sWord2)
     if not lMorph1 or not lMorph2:
         return ":N:e:p"
-    sGender1 = cr.getGender(lMorph1)
-    sGender2 = cr.getGender(lMorph2)
+    sGender1, _ = cr.getGenderNumber(lMorph1)
+    sGender2, _ = cr.getGenderNumber(lMorph2)
     if sGender1 == ":m" or sGender2 == ":m":
         return ":N:m:p"
     if sGender1 == ":f" or sGender2 == ":f":
         return ":N:f:p"
     return ":N:e:p"

Index: gc_lang/fr/rules.grx
==================================================================
--- gc_lang/fr/rules.grx
+++ gc_lang/fr/rules.grx
@@ -3305,20 +3305,17 @@
     à                [la|l’|leur]         @:[NA]¬:Y
     [sans|pour|par]  [la|l’|le|les|leur]  @:[NA]¬:Y
     [à|par]                               @:[NA]¬:Y
         <<- =>> select(\-1, "", ":V")
 
-    [de|d’]  ?[la|l’|leur]¿  @:¬:[YD]
-        <<- not value(<1, "|semblant|") =>> select(\-1, "", ":V")
-
-    du   @:[NA].*:[me]:[si]¬:[GY]
-        <<- =>> select(\2, ":[NA]")
-
-    aucun  @:[NA].*:[me]:s¬:G
-    aucune @:[NA].*:[fe]:s¬:G
+    aucun  @:[NA].*:[me]:s¬:(?:G|V0)
+    aucune @:[NA].*:[fe]:s¬:(?:G|V0)
         <<- =>> select(\1, ":D") and select(\2, ":N")
 
+    [au|aux]  @:[NA]¬:V0
+        <<- =>> select(\-1, "", ":V")
+
     certains   @:[NA].*:[me]:p¬:(?:G|3p|V0)
     certaines  @:[NA].*:[fe]:p¬:(?:G|3p|V0)
         <<- =>> select(\1, ":D") and select(\2, ":[NA]")
 
     d’ [un|une]  *WORD
@@ -3328,18 +3325,20 @@
         <<- =>> select(\2, ":N")
 
     l’ [un|une]  *WORD
         <<- not value(\3, "|plus|") =>> select(\3, ":[123][sp]")
 
-    [des|chaque|quelque|quelques|cet|cette|ces|mon|ma|ta|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs|aucun|aucune]  *WORD
-        <<- not morph(\-1, ":V0") =>> select(\-1, "", ":V")
+    chaque  @:[NA]¬:V0
+    chaque  [avoir|être]
+        <<- =>> select(\-1, "", ":V")
 
     ce @:[NA].*:[me]:[si]¬:(?:3[sp]|V0)
         <<- not value(<1, "|il|elle|on|iel|ils|elles|iels|ne|n’|") =>> select(\-1, ":[NA]")
 
-    sa  @¬:(?:V0|3s)
-        <<- =>> select(\2, "", ":V")
+    [cet|cette|ces] @:[NA]¬:V0
+    [cet|cette|ces] [avoir|être]
+        <<- =>> select(\-1, "", ":V")
 
     les  ~.es$
         <<- not value(<1, "|tu|ne|n’|me|m’|te|t’|se|s’|nous|vous|") and morph(\2, ":V1.*Ip.*:2s") and not tagbefore(\1, "_2s_") and not value(>1, "|tu|pas|jamais|")
         =>> select(\2, "", ":V")
 
@@ -3347,39 +3346,78 @@
         <<- not value(<1, "|l’|quelqu’|quelqu|") and not value(\2, "|a|fut|fût|est|fait|") and not morph(\2, ":P") =>> select(\2, "", ":V")
 
     [/_VCint_|/_VCimp_]  [le|la|l’|leur|les]  $:¬:Y
         <<- =>> select(\2, ":D")
 
+    [de|d’]  ?[la|l’|leur]¿  @:¬:[YD]
+        <<- not value(<1, "|semblant|") =>> select(\-1, "", ":V")
+
     de [>tel|ce|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|notre|votre|plein|pleine]  *WORD
         <<- =>> select(\3, "", ":V")
 
     de [tous|toutes] les *WORD
         <<- =>> select(\4, ":[NA]")
 
+    des  @:[NA]
+        <<- not \1.isupper() =>> select(\-1, "", ":V")
+
+    du   @:[NA].*:[me]:[si]¬:[GY]
+        <<- =>> select(\2, ":[NA]")
+
     en [plein|pleine] *WORD
         <<- =>> select(\3, ":[NA]")
 
     en tant que  *WORD
         <<- =>> select(\4, ":[NA]")
 
     la nuit
         <<- =>> select(\2, ":N")
 
+    leurs @:[NA]¬:V0
+        <<- not value(<1, "|je|tu|il|on|elle|iel|nous|vous|ils|elles|iels|") =>> select(\-1, ":[NA]")
+
+    mon @:[NA]¬:V0
+    mon [avoir|être]
+        <<- =>> select(\-1, "", ":V")
+
+    [ma|ta] @:[NA]¬:V0
+        <<- =>> select(\-1, "", ":V")
+
+    sa  @¬:(?:V0|3s)
+        <<- =>> select(\2, "", ":V")
+
+    [notre|votre] @:[NA]¬:V0
+        <<- not value(<1, "|du|le|la|l’|les|des|") =>> select(\-1, "", ":V")
+
+    [mes|tes|ses|nos|vos] @:[NA]¬:V0
+        <<- =>> select(\-1, "", ":V")
+
+    [nos|vos] @:[NA]¬:V0
+        <<- =>> select(\-1, "", ":V")
+
     ni *WORD
         <<- =>> select(\-1, ":N")
 
     nombre [de|d’|des]
         <<- morph(<1, ":[VR]|<start>|>,") =>> select(\1, ":N")
 
     par  *WORD
         <<- =>> select(\2, "", ":[123][sp]")
 
-    plein  [de|d’]  @:[AN]
+    plein  [de|d’]  @:[NA]
         <<- not morph(<1, ":(?:D.*:m|V[0-3]e)") =>> =define(\1, ":G")
 
     plusieurs  @:[NA].*:p¬:(?:G|3p|V0)
         <<- =>> select(\1, ":D") and select(\2, ":[NA]")
+
+    [quel|quels|quelle|quelles] @:[NA]¬:V0
+    [quel|quels|quelle|quelles] [être|avoir]
+        <<- =>> select(\-1, "", ":V")
+
+    [quelque|quelques]  @:[NA]¬:V0
+    [quelque|quelques]  [avoir|être]
+        <<- =>> select(\-1, "", ":V")
 
     sans  @:[ISKP]
         <<- =>> select(\2, ":[NA]")
 
     source [de|d’]
@@ -7402,11 +7440,11 @@
 
 __conf_on_ont__
     [<start>|,|/_start_] ?l’¿ (ont) [ne|n’|me|m’|te|se|s’]
     [<start>|,|/_start_] ?l’¿ (ont) [lui|nous|vous] @:[123][sp]¬:G
     [<start>|,|/_start_] ?l’¿ (ont) [leur|le|la|l’] @:[123][sp]¬:(?:G|[NA].*:[si])
-    [<start>|,|/_start_] ?l’¿ (ont) @:[123][sp]¬:[GQ]|>(?:envie|charge|peine|affaire|hâte|force|recours|somme)/
+    [<start>|,|/_start_] ?l’¿ (ont) @:[123][sp]¬:[GQ]|>(?:envie|charge|peine|marre|affaire|hâte|force|recours|somme)/
         <<- /conf/ -1>> on                                          && Confusion probable : le mot “ont” est une conjugaison du verbe avoir.
 
     [<start>|,|/_start_] ?l’¿ ont t’
         <<- /conf/ not value(>1, "|il|ils|elle|elles|iel|iels|") --2>> on    && Confusion probable : le mot “ont” est une conjugaison du verbe avoir.
 
@@ -8660,15 +8698,15 @@
 TEST: Il les y {{à}}.                                                   ->> a
 TEST: Y {{à}} du poulet                                                 ->> a
 
 
     [l’|les] à
-        <<- /conf/ not \1.isupper() and not value(>1, "|côté|coup|pic|peine|peu|plat|propos|valoir|")
+        <<- /conf/ not \1.isupper() and not value(>1, "|côté|coup|pic|peine|marre|peu|plat|propos|valoir|")
         -2>> a                                                      && Confusion : “à” est une préposition. Pour le verbe avoir, écrivez “a”.
 
     en à
-        <<- /conf/ not \1.isupper() and not value(>1, "|côté|coup|pic|peine|peu|plat|propos|valoir|") and not morph(<1, ">venir/")
+        <<- /conf/ not \1.isupper() and not value(>1, "|côté|coup|pic|peine|marre|peu|plat|propos|valoir|") and not morph(<1, ">venir/")
         -2>> a                                                      && Confusion : “à” est une préposition. Pour le verbe avoir, écrivez “a”.
 
 TEST: Ce fâcheux, comme à son habitude, les {{à}} ennuyés à mourir.     ->> a
 TEST: Lui l’{{à}} pris par surprise.                                    ->> a
 TEST: Il y en {{à}}.                                                    ->> a
@@ -9351,11 +9389,11 @@
 ## substantifs
 
 __conf_substantif_à_substantif!3__
     *WORD  a  $:N¬*
         <<- /conf/ \2.islower()
-            and not value(\3, "|accès|bon|bonne|beau|besoin|charge|confiance|connaissance|conscience|crainte|droit|envie|été|faim|force|grand|grande|hâte|honte|interdiction|intérêt|lieu|mauvaise|peine|peur|raison|rapport|recours|soif|tendance|terre|tort|trait|vent|vocation|")
+            and not value(\3, "|accès|bon|bonne|beau|besoin|charge|confiance|connaissance|conscience|crainte|droit|envie|été|faim|force|grand|grande|hâte|honte|interdiction|intérêt|lieu|mauvaise|marre|peine|peur|raison|rapport|recours|soif|tendance|terre|tort|trait|vent|vocation|")
             and morph(\1, ":N", "*")
         -2>> à              && Confusion probable : “a” est une forme conjuguée du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0
 
 TEST: les bobos {{a}} trottinette                                                       ->> à
 TEST: la lettre A est la première lettre de l’alphabet
@@ -18661,10 +18699,11 @@
     >porte d’ entrée
     >pot [de|d’] [chambre|colle|départ|échappement]
     >poteau d’ exécution
     >poudre aux yeux
     >poudre d’ escampette
+    >poudre [de|d’] perlimpinpin
     >poule aux œufs d’ or
     >pouvoir d’ achat
     >prédication [de|d’] rue
     >préfecture [de|d’] police
     >président en exercice
@@ -18849,10 +18888,11 @@
     >vente aux enchères
     >ventilateur à merde
     >vérification [de|d’] routine
     vernis à ongles
     >ver [de|d’] terre
+    >ver à soie
     >verre à pied
     >vêtement [de|d’] rechange
     >vidéo X
     >vie [de|d’] bohème
     >violence [par|sur] personne dépositaire de l’ autorité publique
@@ -19248,21 +19288,21 @@
     >avoir  ?[pas|jamais|plus|guère|point]¿  un peu
     >avoir  ?[pas|jamais|plus|guère|point]¿  un petit peu
     >avoir  ?[pas|jamais|plus|guère|point]¿  un tout petit peu
         <<- morph(>1, ":[QY]") ~2:0>> *
 
-    >avoir  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
+    >avoir  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|marre|peur|peine|pitié|soif|vent]
     >avoir  bon [dos|fond]
     >avoir  bon pied ?,¿ bon œil
     >avoir  carte blanche
     >avoir  forme [humaine|animale]
     >avoir  partie [gagnée|liée]
     >avoir  voix au chapitre
         <<- ~2:0>> ␣
         <<- =>> define(\2, ":ÉV")
 
-    >avoir  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
+    >avoir  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|marre|peur|peine|pitié|soif|vent]
     >avoir  [pas|jamais|plus|guère|point]  bon [dos|fond]
     >avoir  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
     >avoir  [pas|jamais|plus|guère|point]  carte blanche
     >avoir  [pas|jamais|plus|guère|point]  forme [humaine|animale]
     >avoir  [pas|jamais|plus|guère|point]  gain de cause
@@ -19270,11 +19310,11 @@
     >avoir  [pas|jamais|plus|guère|point]  quartier libre
     >avoir  [pas|jamais|plus|guère|point]  voix au chapitre
         <<- ~3:0>> ␣
         <<- =>> define(\3, ":ÉV")
 
-    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les @:B:.:p  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
+    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les @:B:.:p  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|marre|peur|peine|pitié|soif|vent]
     >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les @:B:.:p  @:(?:Q|V1.*:Y)
         <<- ~2:-2>> *
 
     n’  >avoir  que  $:Q
         <<- ~3>> *
@@ -19302,21 +19342,21 @@
     /_VCint_  ?[pas|jamais|plus|guère|point]¿  un peu
     /_VCint_  ?[pas|jamais|plus|guère|point]¿  un petit peu
     /_VCint_  ?[pas|jamais|plus|guère|point]¿  un tout petit peu
         <<- morphVC(\1, ":V0a") and morph(>1, ":[QY]") ~2:0>> *
 
-    /_VCint_  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
+    /_VCint_  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|marre|peur|peine|pitié|soif|vent]
     /_VCint_  bon [dos|fond]
     /_VCint_  bon pied ?,¿ bon œil
     /_VCint_  carte blanche
     /_VCint_  forme [humaine|animale]
     /_VCint_  partie [gagnée|liée]
     /_VCint_  voix au chapitre
         <<- morphVC(\1, ":V0a") ~2:0>> ␣
         <<- __also__ =>> define(\2, ":ÉV")
 
-    /_VCint_  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
+    /_VCint_  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|marre|peur|peine|pitié|soif|vent]
     /_VCint_  [pas|jamais|plus|guère|point]  bon [dos|fond]
     /_VCint_  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
     /_VCint_  [pas|jamais|plus|guère|point]  carte blanche
     /_VCint_  [pas|jamais|plus|guère|point]  forme [humaine|animale]
     /_VCint_  [pas|jamais|plus|guère|point]  gain de cause
@@ -19324,11 +19364,11 @@
     /_VCint_  [pas|jamais|plus|guère|point]  quartier libre
     /_VCint_  [pas|jamais|plus|guère|point]  voix au chapitre
         <<- morphVC(\1, ":V0a") ~3:0>> ␣
         <<- __also__ =>> define(\3, ":ÉV")
 
-    /_VCint_  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les @:B:.:p  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
+    /_VCint_  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les @:B:.:p  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|marre|peur|peine|pitié|soif|vent]
     /_VCint_  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les @:B:.:p  @:(?:Q|V1.*:Y)
         <<- morphVC(\1, ":V0a") ~2:-2>> *
 
 
 __purge_après_verbe__
@@ -22379,18 +22419,18 @@
 TEST: Tout ce qui a {{lieue}} hors de ce pays est ignoré.                               ->> lieu
 TEST: la répression extrêmement violente des diverses manifestations qui ont eu lieu depuis la fin du mois de novembre
 
 
 # mare / marre
-__conf_marre_mare__
+__conf_marre_mare!6__
     [la|une|cette|quelle|cette|ma|ta|sa] ?petite¿ marre
         <<- /conf/ --1>> mare                                   && Confusion. Pour parler d’une petite étendue d’eau, écrivez “mare”. En “avoir marre de” = “en avoir assez de”.
 
     en >avoir mare
         <<- /conf/ -3>> marre                                   && Confusion. Une mare est une petite étendue d’eau.
 
-TEST: cette {{marre}} est presque sèche.                        ->> mare
+TEST: la {{marre}} est presque sèche.                           ->> mare
 TEST: j’en ai {{mare}} de tout ça.                              ->> marre
 TEST: en avoir vraiment {{mare}} de ces conneries.              ->> marre
 
 
 # mâter / mater
@@ -24709,11 +24749,11 @@
 
 __gn_ces_aux_pluriel_1m__
     [ces|aux]  *WORD
         <<- /gn/ morph(\2, ":[NA].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
         -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné : « \2 » devrait être au pluriel.
-        <<- /gn/ __also__ and morph(\2, ">[bcçdfglklmnpqrstvwxz].*:m", ":f") >>>
+        <<- /gn/ __also__ and morph(\2, ">[bcçdfgjklmnpqrstvwxz].*:m", ":f") >>>
         <<- /gn/ \1.endswith("x") or \1.endswith("X") -1>> au                               && Accord de nombre erroné : « \2 » est au singulier.
         <<- /gn/ __else__ -1>> ce                                                           && Accord de nombre erroné : « \2 » est au singulier.
 
 TEST: {{ces}} {{détournement}} de fonds et ces vols                             ->> ce|||détournements
 TEST: ces {{étudiant}} sont légion.                                             ->> étudiants
@@ -25921,24 +25961,88 @@
 TEST: l’existence de la foi {{rejeté}}                          ->> rejetée
 TEST: son homologue de la ville écarté de l’ordre
 
 
 __gn_det_nom_de_det_nom_adj_sing!3__
-    [le|la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD  [de|d’]  [la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD  @:[NA].*:p¬:(?:G|P|[me]:[is]|V0|3[sp])
-    [le|la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD  du                                                                          *WORD  @:[NA].*:p¬:(?:G|P|[me]:[is]|V0|3[sp])
+    [le|la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD  [de|d’]  [la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD  @:[NA].*:p¬:(?:G|P|i|s|V0|3[sp])
+    [le|la|l’|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD  du                                                                          *WORD  @:[NA].*:p¬:(?:G|P|i|s|V0|3[sp])
         <<- /gn/ morph(\-2, ":[NA].*:[me]") and not apposition(\-2, \-1)
         --1>> =suggSing(\-1, True)                                                                  && Accord erroné : “\-1” devrait être au masculin singulier.
 
 TEST: la femme de notre homme {{expulsés}}                      ->> expulsé
 
+
+__gn_det_nom_de_det_nom_adj_sing_plur__
+    [le|un|ce|cet]  *WORD  de [ces|mes|tes|ses|nos|vos|leurs|quelques]                      *WORD  @:A¬:(?:G|P|V0|3[sp])
+    [le|un|ce|cet]  *WORD  des                                                              *WORD  @:A¬:(?:G|P|V0|3[sp])
+        <<- /gn/ morph(\2, ":[NA].*:[me]:[si]", ":[fp]") and morph(\-2, ":[NA].*:[pi]") and not apposition(\-2, \-1)
+            and not agreement(\-2, \-1) and not agreement(\2, \-1)
+        --1>> =suggAgree(\-1, \-2) + "|" + suggMasSing(\-1)                                         && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
+
+    [la|une|cette|ma|ta|sa]  *WORD  de [ces|mes|tes|ses|nos|vos|leurs|quelques]             *WORD  @:A¬:(?:G|P|V0|3[sp])
+    [la|une|cette|ma|ta|sa]  *WORD  des                                                     *WORD  @:A¬:(?:G|P|V0|3[sp])
+        <<- /gn/ morph(\2, ":[NA].*:[fe]:[si]", ":[mp]") and morph(\-2, ":[NA].*:[pi]") and not apposition(\-2, \-1)
+            and not agreement(\-2, \-1) and not agreement(\2, \-1)
+        --1>> =suggAgree(\-1, \-2) + "|" + suggFemSing(\-1)                                         && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
+
+    [l’|notre|votre|leur]  *WORD  de [ces|mes|tes|ses|nos|vos|leurs|quelques]               *WORD  @:A¬:(?:G|P|V0|3[sp])
+    [l’|notre|votre|leur]  *WORD  des                                                       *WORD  @:A¬:(?:G|P|V0|3[sp])
+        <<- /gn/ morph(\2, ":[NA].*:[si]", ":p") and morph(\-2, ":[NA].*:[pi]") and not apposition(\-2, \-1)
+            and not agreement(\-2, \-1) and not agreement(\2, \-1)
+        --1>> =suggAgree(\-1, \-2) + "|" + suggAgree(\-1, \2)                                       && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
+
+    [mon|ton|son]  *WORD  de [ces|mes|tes|ses|nos|vos|leurs|quelques]                       *WORD  @:A¬:(?:G|P|V0|3[sp])
+    [mon|ton|son]  *WORD  des                                                               *WORD  @:A¬:(?:G|P|V0|3[sp])
+        <<- /gn/ morph(\2, ":[NA].*:[si]", ":p") and morph(\-2, ":[NA].*:[pi]") and not apposition(\-2, \-1)
+            and not agreement(\-2, \-1) and not agreement(\2, \-1)  >>>
+        <<- /gn/ morph(\2, ">[bcçdfgjklmnpqrstvwxz].*:[NA].*:[me]:[si]")
+        --1>> =suggAgree(\-1, \-2) + "|" + suggMasSing(\-1, \2)                                     && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
+        <<- /gn/ __else__ and morph(\2, ":[NA].*:[si]")
+        --1>> =suggAgree(\-1, \-2) + "|" + suggAgree(\-1, \2)                                       && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
+
+    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  [de|d’] [un|ce|cet]                        *WORD  @:A¬:(?:G|P|V0|3[sp])
+    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  du                                         *WORD  @:A¬:(?:G|P|V0|3[sp])
+        <<- /gn/ morph(\2, ":[NA].*:[pi]", ":s") and morph(\-2, ":[NA].*:[me]:[si]") and not apposition(\-2, \-1)
+                and not agreement(\-2, \-1) and not agreement(\2, \-1)
+        --1>> =suggMasSing(\-1) + "|" + suggAgree(\-1, \2)                                          && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
+
+    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  [de|d’] [la|une|cette|ma|ta|sa]            *WORD  @:A¬:(?:G|P|V0|3[sp])
+        <<- /gn/ morph(\2, ":[NA].*:[pi]", ":s") and morph(\-2, ":[NA].*:[fe]:[si]") and not apposition(\-2, \-1)
+                and not agreement(\-2, \-1) and not agreement(\2, \-1)
+        --1>> =suggFemSing(\-1) + "|" + suggAgree(\-1, \2)                                          && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
+
+    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  [de|d’] [l’|notre|votre|leur]              *WORD  @:A¬:(?:G|P|V0|3[sp])
+        <<- /gn/ morph(\2, ":[NA].*:[pi]", ":s") and morph(\-2, ":[NA].*:[si]") and not apposition(\-2, \-1)
+                and not agreement(\-2, \-1) and not agreement(\2, \-1)
+        --1>> =suggAgree(\-1, \-2) + "|" + suggAgree(\-1, \2)                                       && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
+
+    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  [de|d’] [mon|ton|son]                      *WORD  @:A¬:(?:G|P|V0|3[sp])
+        <<- /gn/ morph(\2, ":[NA].*:[pi]", ":s") and morph(\-2, ":[NA].*:[si]") and not apposition(\-2, \-1)
+                and not agreement(\-2, \-1) and not agreement(\2, \-1) >>>
+        <<- /gn/ morph(\-2, ">[bcçdfgjklmnpqrstvwxz].*:[NA].*:[me]:[si]")
+        --1>> =suggMasSing(\-1, \-2) + "|" + suggAgree(\-1, \2)                                     && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
+        <<- /gn/ __else__ and morph(\-2, ":[NA].*:[si]")
+        --1>> =suggAgree(\-1, \-2) + "|" + suggAgree(\-1, \2)                                       && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
+
+TEST: le pari des fous {{engagées}} dans cette fuite en avant                   ->> engagé|engagés
+TEST: la faute de ces idiots {{inconscient}}                                    ->> inconscients|inconsciente
+TEST: l’erreur de nos dirigeants {{oublié}} par tout le monde                   ->> oubliés|oubliée
+TEST: son président de ces jours {{passée}}                                     ->> passés|passé
+TEST: son élégance de ces jours {{passées}}                                     ->> passés|passée
+TEST: quelques erreurs du passé {{oubliés}}                                     ->> oublié|oubliées
+TEST: les errements de la cité {{voisin}}                                       ->> voisine|voisins
+TEST: vos compatriotes de votre ville {{tenu}} en haleine                       ->> tenue|tenus
+TEST: les instructions de mon président {{ignorée}}                             ->> ignoré|ignorées
+TEST: quelques consignes de son instructeur {{oubliée}}                         ->> oublié|oubliées
+
 
 __gn_det_nom_de_det_nom_adj_plur__
-    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  de [ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  @:[NA].*:[pi]¬:(?:G|P|s|V0|3[sp])
-    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  des                                          *WORD  @:[NA].*:[pi]¬:(?:G|P|s|V0|3[sp])
+    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  de [ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  @:A.*:[pi]¬:(?:G|P|s|V0|3[sp])
+    [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  des                                          *WORD  @:A.*:[pi]¬:(?:G|P|s|V0|3[sp])
         <<- /gn/ morph(\2, ":[NA].*:[pi]", ":s") and morph(\-2, ":[NA].*:[pi]") and not apposition(\-2, \-1)
                 and not agreement(\-2, \-1) and not agreement(\2, \-1)
-        --1>> =suggAgree(\-1, \-2)                                                                  && Accord erroné : “\-1” devrait être accordé avec “\2” ou “\-2”.
+        --1>> =suggAgree(\-1, \-2)                                                                  && Accord erroné : “\-1” devrait être accordé avec “\-2” ou “\2”.
 
     [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  de [ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  @:[NA].*:s¬:(?:G|P|i|p|V0|3[sp])
     [les|ces|mes|tes|ses|nos|vos|leurs|quelques]  *WORD  des                                          *WORD  @:[NA].*:s¬:(?:G|P|i|p|V0|3[sp])
         <<- /gn/ morph(\2, ":[NA].*:[pi]", ":s") and morph(\-2, ":[NA].*:[pi]") and not apposition(\-2, \-1) and not (value(>1, "|et|ou|") and morph(>2, ":A.*:[si]"))
         --1>> =suggPlur(\-1)                                                                        && Accord erroné : “\-1” devrait être au pluriel.
@@ -29200,11 +29304,14 @@
 
 TEST: elles ne s’y étaient pas {{donnée}}.                                  ->> données
 TEST: sans fin elles se sont succédé
 
 
-__ppas_se_être__
+__ppas_ne_me_te_se_être__
+    [ne|n’]  ?[y|en]¿  être  @:(?:Y|[123][sp])¬:[QAG]
+        <<- /ppas/ --1>> =suggVerbPpas(\-1)                                                         && Incohérence. Le verbe devrait être un participe passé.
+
     [me|m’|te|se|s’]  ?[y|en]¿  >être  @:(?:Y|[123][sp])¬:[QAG]
         <<- /ppas/ morph(\-2, ":[123]s") --1>> =suggVerbPpas(\-1, ":s")                             && Incohérence. Le verbe devrait être un participe passé.
         <<- /ppas/ morph(\-2, ":[123]p") --1>> =suggVerbPpas(\-1, ":p")                             && Incohérence. Le verbe devrait être un participe passé.
         <<- /ppas/ __else__ --1>> =suggVerbPpas(\-1)                                                && Incohérence. Le verbe devrait être un participe passé.
 
@@ -29213,10 +29320,12 @@
         --1>> =suggSing(\-1)                                                                        && Le participe passé devrait être au singulier.
 
     tu  t’  ?[y|en]¿  [es|étais|seras|serais|fus|fusses]  @:(?:Y|[123][sp])¬:[QG]
         <<- /ppas/ --1>> =suggVerbPpas(\-1, ":s")                                                   && Incohérence. Le verbe devrait être un participe passé.
 
+TEST: n’y être {{attacher}} que par habitude                                ->> attaché|attachés|attachée|attachées
+TEST: n’être {{attacher}} à rien                                            ->> attaché|attachés|attachée|attachées
 TEST: s’être toujours {{donner}} le mot.                                    ->> donné|donnée|donnés|données
 TEST: je suis venu et me suis totalement {{donnés}} à cette œuvre           ->> donné
 TEST: c’est de ce qui s’est {{passe}}.                                      ->> passé|passée
 TEST: s’était toujours {{passe}} comme ça avec elle                         ->> passé|passée
 TEST: s’est {{approche}} de la penderie                                     ->> approché|approchée
@@ -30215,28 +30324,28 @@
 
 !!!! Participes passés: accord avec le substantif précédent                                       !!
 
 __ppas_sujet_être_accord_immunités__
     *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  *WORD  ?[ne|n’]¿  ?[en|y]¿
-        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
+        || [>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir]
         || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                *WORD
     *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  *WORD  ?[ne|n’]¿  ?[en|y]¿
-        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
+        || [>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir]
         || être [devenu+e|redevenu+e|resté+e|demeuré+e]                                             *WORD
     *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  *WORD  ?[ne|n’]¿  ?[en|y]¿
-        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
+        || [>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir]
         || avoir [été|semblé|paru]                                                                  *WORD
         <<- /ppas/ agreement(\1, \-1) !-1>>
 
     *WORD  [que|qu’]  $:M  ?[ne|n’]¿
-        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
+        || [>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir]
         || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                *WORD
     *WORD  [que|qu’]  $:M  ?[ne|n’]¿
-        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
+        || [>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir]
         || être [devenu+e|redevenu+e|resté+e|demeuré+e]                                             *WORD
     *WORD  [que|qu’]  $:M  ?[ne|n’]¿
-        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
+        || [>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir]
         || avoir [été|semblé|paru]                                                                  *WORD
         <<- /ppas/ agreement(\1, \-1) !-1>>
 
 
 __ppas_sujet_être_accord_singulier__
@@ -30727,10 +30836,11 @@
 TEST: ce qu’il avait cru être devenait un rêve lointain et à peine concevable.
 TEST: la grande crainte du maire est de voir s’effondrer d’autres immeubles
 TEST: la grande crainte du maire est de voir arriver d’autres immigrés
 TEST: Ce faisant, la chambre criminelle nous précise que relayer n’est pas forcément diffamer
 TEST: maintenir en confinement certaines personnes sous prétexte qu’elles sont à risques serait une mesure inconstitutionnelle et discriminatoire.
+TEST: Nous avons vu cet être donner sa vie pour son enfant.
 
 
 
 !!
 !!
@@ -30877,11 +30987,11 @@
         <<- !3>>
 
 
 __ppas_ayant__
     ayant  @:(?:Q.*:[fp]|[123][sp])¬:(?:G|N|m:[si])
-        <<- /ppas/ not value(\-1, "|barre|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") and not value(<1, "|m’|t’|l’|nous|vous|les|")
+        <<- /ppas/ not value(\-1, "|barre|confiance|charge|cours|envie|marre|peine|prise|crainte|cure|affaire|hâte|force|recours|") and not value(<1, "|m’|t’|l’|nous|vous|les|")
         --1>> =suggMasSing(\-1)
         && Après avoir, il faut un participe passé au masculin singulier (sauf si le COD se trouve avant le verbe, improbable dans ce cas de figure).
 
 TEST: ayant {{marqués}} les esprits, tout le monde se souvenait d’elles.                            ->> marqué
 TEST: ayant prise sur les événements, elle ne voyait aucune raison de s’alarmer.
@@ -30889,32 +30999,32 @@
 TEST: il pensait, nous ayant oubliés, que nous l’aurions oublié, nous aussi.
 
 
 __ppas_pronom_avoir__
     il  ?[ne|n’]¿  ?[lui|leur]¿  >avoir  *WORD
-        <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
+        <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|marre|peine|prise|crainte|cure|affaire|hâte|force|recours|")
             and (value(<1, "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") or (value(<1, "|que|qu’|") and morph(<2, ":V|<start>", ":[NA]")))
             and \-1.islower() and morph(\-1, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
         --1>> =suggVerbPpas(\-1, ":m:s")
         && Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais
 
     il  ?[ne|n’]¿  y  >avoir  *WORD
-        <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
+        <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|marre|peine|prise|crainte|cure|affaire|hâte|force|recours|")
             and (value(<1, "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") or (value(<1, "|que|qu’|") and morph(<2, ":V|<start>", ":[NA]")))
             and \-1.islower() and morph(\-1, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|N|Q.*:m:[si])")
         --1>> =suggVerbPpas(\-1, ":m:s")
         && Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais
 
     [je|j’|tu|elle|on|ils|elles|iel|iels|et|qui|ça|cela|ceci|celui-ci|celui-là|celle-ci|celle-là|ceux-ci|ceux-là|celles-ci|celles-là]  ?[ne|n’]¿  ?[lui|leur|y]¿  >avoir  *WORD
-        <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
+        <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|marre|peine|prise|crainte|cure|affaire|hâte|force|recours|")
             and (value(<1, "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") or (value(<1, "|que|qu’|") and morph(<2, ":V|<start>", ":[NA]")))
             and \-1.islower() and morph(\-1, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
         --1>> =suggVerbPpas(\-1, ":m:s")
         && Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais
 
     [je|j’|tu|il|elle|on|ils|elles|iel|iels|et|qui|ça|cela|ceci|celui-ci|celui-là|celle-ci|celle-là|ceux-ci|ceux-là|celles-ci|celles-là]  ?[ne|n’]¿  en  >avoir  *WORD
-        <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
+        <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|marre|peine|prise|crainte|cure|affaire|hâte|force|recours|")
             and (value(<1, "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") or (value(<1, "|que|qu’|") and morph(<2, ":V|<start>", ":[NA]")))
             and \-1.islower() and morph(\-1, ":(?:[123][sp])", ":[GWQ]")
         --1>> =suggVerbPpas(\-1, ":m:s")
         && Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais
 
@@ -31088,18 +31198,23 @@
 TEST: Pourquoi m’avoir {{ignorés}} ainsi ?                                                          ->> ignoré
 TEST: sans avoir {{ignorée}} le problème.                                                           ->> ignoré
 
 
 ## avoir avec participe passé
-__ppas_m_t_l_avoir__
+__ppas_n_m_t_l_avoir__
+    n’  ?[en|y]¿  >avoir  @:(?:Y|[123][sp])¬:[QGWMX]
+        <<- /ppas/ not value(\-1, "|confiance|charge|cours|envie|marre|peine|prise|crainte|cure|affaire|hâte|force|recours|pouvoir|")
+        --1>> =suggVerbPpas(\-1, ":m:s")                                                && Confusion probable : employez un participe passé.
+
     [l’|m’]  ?[en|y]¿  >avoir  @:(?:Y|[123][sp])¬:[QGWMX]
-        <<- /ppas/ --1>> =suggVerbPpas(\-1, ":m:s")         && Confusion : employez un participe passé.
+        <<- /ppas/ --1>> =suggVerbPpas(\-1, ":m:s")                                     && Confusion : employez un participe passé.
 
     t’  ?[en|y]¿  >avoir  @:(?:Y|[123][sp])¬:[QGWMX]
-        <<- /ppas/ not value(\-1, "|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
-        --1>> =suggVerbPpas(\-1, ":m:s")                    && Confusion : employez un participe passé.
+        <<- /ppas/ not value(\-1, "|confiance|charge|cours|envie|marre|peine|prise|crainte|cure|affaire|hâte|force|recours|")
+        --1>> =suggVerbPpas(\-1, ":m:s")                                                && Confusion : employez un participe passé.
 
+TEST: n’y avoir jamais {{toucher}}                                                                  ->> touché
 TEST: m’avoir {{terminer}}.                                                                         ->> terminé
 TEST: il m’a {{souffler}} la bonne réponse.                                                         ->> soufflé
 TEST: elle t’en a {{parle}}.                                                                        ->> parlé
 TEST: c’est vous qui m’avez {{convertit}}.                                                          ->> converti
 TEST: Mélanie l’a {{transformer}}                                                                   ->> transformé
@@ -31334,19 +31449,19 @@
 
 !!!! Participes passés avec “avoir” (formes interrogatives)                                       !!
 
 __ppas_avoir_interrogatif__
     *WORD  /_VCint_  *WORD
-        <<- /ppas/ morphVC(\2, ":V0a") and not value(\3, "|barre|charge|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
+        <<- /ppas/ morphVC(\2, ":V0a") and not value(\3, "|barre|charge|confiance|cours|envie|peine|marre|prise|crainte|cure|affaire|hâte|force|recours|") >>>
         <<- /ppas/ morph(\3, ":(?:Y|[123][sp])", ":[QMG]")
         -3>> =suggVerbPpas(\3, ":m:s")                      && Incohérence probable avec “\2”. Après “avoir”, ce verbe devrait être un participe passé.
         <<- /ppas/ __else__ and not value(\1, "|les|l’|m’|t’|nous|vous|en|") and morph(\3, ":Q.*:[fp]", ":m:[si]")
             and not morph(\1, ":[NA].*:[fp]") and not before("(?i)\\b(?:quel(?:le|)s?|combien) ")
         -3>> =suggVerbPpas(\3, ":m:s")                      && Avec “avoir”, il faut un participe passé (au masculin singulier, sauf éventuellement si un COD précède).
 
     [<start>|,|(]  ?n’¿  /_VCint_  *WORD
-        <<- /ppas/ morphVC(\-2, ":V0a") and not value(\-1, "|barre|charge|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
+        <<- /ppas/ morphVC(\-2, ":V0a") and not value(\-1, "|barre|charge|confiance|cours|envie|peine|marre|prise|crainte|cure|affaire|hâte|force|recours|") >>>
         <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QMG]")
         --1>> =suggVerbPpas(\-1, ":m:s")                    && Incohérence probable avec “\-2”. Après “avoir”, ce verbe devrait être un participe passé.
         <<- /ppas/ __else__ and morph(\-1, ":Q.*:[fp]", ":m:[si]")
         --1>> =suggVerbPpas(\-1, ":m:s")                    && Avec “avoir”, il faut un participe passé (au masculin singulier, sauf éventuellement si un COD précède).