diff --git a/CHANGELOG.fr.md b/CHANGELOG.fr.md
index 1990aedb4ac0b590adc550595fef211462f2d62e..cec15433ff8846a1e7d46891366227fcc88b844b 100644
--- a/CHANGELOG.fr.md
+++ b/CHANGELOG.fr.md
@@ -14,6 +14,11 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
 
 ## [Non-publié/Non-Stabilisé] (par [1000i100])
 
+## [Version 3.5.3] - 2022-12-16 (par [1000i100])
+### Corrections
+- '\' est désormais considéré comme un caractère spécial
+- Les sérialisations internes (rawSerialize) de Dictionary ne reconvertissent plus les caractères spéciaux
+
 ## [Version 3.5.2] - 2022-12-16 (par [1000i100])
 ### Corrections
 - Dictionary échappe correctement les caractères spéciaux
@@ -28,7 +33,7 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
 - dictionary intègre un mécanisme de cache pour détecter les doublons. Il est désactivable au-delà d'1_000_000 pour éviter les crashs et saturation de mémoire.
 - dictionary-parser gère toutes les syntaxes d'expression régulières qu'utilisaient gsper v2 + des situations plus complexes
 - dictionary-parser permet de distinguer identifiant secret et mot de passe via le séparateur `@@`
-- dictionary-parser permet plusieurs types de déclinaisons : sans accents, accents optionnels, sans majuscule, majuscule optionnelle, tout en majuscule, et des déclinaison type leetSpeak.
+- dictionary-parser permet plusieurs types de déclinaisons : sans accents, accents optionnels, sans majuscule, majuscule optionnelle, tout en majuscule, et des déclinaisons type leetSpeak.
 - dictionary-tree permet de savoir combien de combinaisons sont possibles et d'itérer dessus sans avoir besoin de les pré-générer.
 ### Corrections
 - Vérification à chaque build (et donc dans la CI) que les packets destinés à tourner dans le navigateur n'ont aucunes dépendances.
@@ -36,7 +41,7 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
 
 ## [Version 3.4.2] - 2022-11-20 (par [1000i100])
 ### Corrections
-- checkKey ne complète plus automatiquement les clef trop courtes et envoi donc l'erreur attendue pour les clefs trops courtes.
+- checkKey ne complète plus automatiquement les clefs trop courtes et envoi donc l'erreur attendue pour les clefs trop courtes.
 
 ## [Version 3.4.1] - 2022-11-20 (par [1000i100])
 ### Corrections
@@ -88,11 +93,11 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
 ## [Version 3.0.2] - 2020-12-10 (par [1000i100])
 ### Ajouté
 - minification des modules g1lib
-- publication automatisé sur npm à la publication de tag (sous réserve que la CI passe)
+- publication automatisée sur npm à la publication de tag (sous réserve que la CI passe)
 
 ## [Version 3.0.1] - 2020-12-10 (par [1000i100])
 ### Ajouté
-- test unitaire exectué dans la CI
+- test unitaire exécuté dans la CI
 - couverture de test
 - suivi de la maintenabilité / complexité
 - suivi de la duplication
@@ -107,7 +112,7 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
 ## [Version 2.1.0] - 2018-06-27 (par [1000i100])
 
 ### Ajouté
-- syntaxe =référence> pour faire des références syncronisé et éviter de générer des variantes non souhaitées.
+- syntaxe =référence> pour faire des références syncronisées et éviter de générer des variantes non souhaitées.
 
 ## [Version 2.0.0] - 2018-05-10 (par [1000i100])
 
@@ -116,12 +121,12 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
 ##### Générateur de variantes de mot de passe
 - Déclinaisons avec Majuscules
 - Désaccentuation
-- Déclinaison avancées façon expression régulière
+- Déclinaison avancée façon expression régulière
 ##### Documentation
-- Rédaction d'une documentation des générateur de variante de mot de passe
-##### Améliorations technique
-- Ajout de test unitaire (meilleur fiabilité).
-- Différentiation de la lib pour la partie crypto et de celle de génération de variantes (meilleur maintenabilité et évolutivité).
+- Rédaction d'une documentation des générateurs de variante de mot de passe
+##### Améliorations techniques
+- Ajout de test unitaire (meilleure fiabilité).
+- Différentiation de la lib pour la partie crypto et de celle de génération de variantes (meilleure maintenabilité et évolutivité).
 
 ## [Version 1.0.1 (Proof of Concept)] - 2018-04-18 (par [1000i100])
 ### Ajouté
@@ -130,8 +135,9 @@ et ce projet adhère au [versionnage sémantique](https://semver.org/spec/v2.0.0
 - intégration des librairies de crypto nécessaires
 - calcul de la clef publique correspondant à chaque combinaison de secrets saisie, et comparaison à la clef publique de référence.
 
-[Non-publié/Non-Stabilisé]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.2...main
+[Non-publié/Non-Stabilisé]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.3...main
 
+[Version 3.5.3]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.2...v3.5.3
 [Version 3.5.2]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.1...v3.5.2
 [Version 3.5.1]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.5.0...v3.5.1
 [Version 3.5.0]: https://git.duniter.org/libs/g1lib.js/-/compare/v3.4.2...v3.5.0
diff --git a/npm/package.json b/npm/package.json
index a15559e0717f660e3d54c1532b1b1e9fbe56d19b..29e580696b1315e776e699c6e0761d8de380bf47 100644
--- a/npm/package.json
+++ b/npm/package.json
@@ -1,6 +1,6 @@
 {
   "name": "g1lib",
-  "version": "3.5.2",
+  "version": "3.5.3",
   "description": "An ubiquitous static javascript toolbox lib for Ǧ1 / Duniter ecosystem with reliability in mind.",
   "main": "nodejs/all.mjs",
 	"browser": "browser/all.mjs",
diff --git a/src/dictionary-escaper.mjs b/src/dictionary-escaper.mjs
index 233d9445b0a350a5eed882d09f6243196a376bda..2925dff93b467b3936fbe8b72950e788c9b2095e 100644
--- a/src/dictionary-escaper.mjs
+++ b/src/dictionary-escaper.mjs
@@ -12,7 +12,8 @@ const specialMap = {
 	'>': String.fromCharCode(0x0b),
 	':': String.fromCharCode(0x0c),
 	'=': String.fromCharCode(0x0d),
-	'@': String.fromCharCode(0x0e)
+	'@': String.fromCharCode(0x0e),
+	'\\': String.fromCharCode(0x0f),
 };
 const revertSpecial = swapKeyValue(specialMap);
 function swapKeyValue(object) {
diff --git a/src/dictionary-escaper.test.mjs b/src/dictionary-escaper.test.mjs
index cf308d501581d0b7f8c554fd776bf2b10e9c3638..ce00c23cb1d258369f535ca0abfe381af5f2b908 100644
--- a/src/dictionary-escaper.test.mjs
+++ b/src/dictionary-escaper.test.mjs
@@ -6,6 +6,8 @@ test('unescape special characters & re-escape them generate identical string', t
 	const cases = [
 		'plop:\\:ici',
 		'[\\]*]',
+		'\\{\\}',
+		'\\\\',
 	]
 	cases.forEach(c=>t.is(app.utfSpecial2escaped(app.escape2utfSpecial(c)), c));
 });
diff --git a/src/dictionary-parser.mjs b/src/dictionary-parser.mjs
index 538f73bc67174335751534e7651f0ba8cd460c17..cb400616d4d1183fb11940ee88ade6bf0f1cb0f8 100644
--- a/src/dictionary-parser.mjs
+++ b/src/dictionary-parser.mjs
@@ -154,7 +154,7 @@ function fromLeet(str){
 	});
 }
 function flattenIt(regStr){
-	return tree.serialize(tree.buildTreeStruct(regStr));
+	return tree.rawSerialize(tree.buildTreeStruct(regStr));
 }
 function resetCache() {
 	cache();
diff --git a/src/dictionary-tree.mjs b/src/dictionary-tree.mjs
index b9da3c96b6668b664f9be66c5f94ab32b283f4df..4e0eee0980579ca7d6cc3a92aaf835bd340573a6 100644
--- a/src/dictionary-tree.mjs
+++ b/src/dictionary-tree.mjs
@@ -163,14 +163,17 @@ export function splitAround(pattern,treeStruct){
 		throw new Error(`Error: how to splitAround ${pattern} with ${JSON.stringify(treeStruct)} RAW: ${treeStruct}`);
 	}
 	const res = recSplitter(treeStruct);
-	if(res.matching) res.matching = serialize(buildTreeStruct(res.matching));
-	if(res.notMatching) res.notMatching = serialize(buildTreeStruct(res.notMatching));
+	if(res.matching) res.matching = rawSerialize(buildTreeStruct(res.matching));
+	if(res.notMatching) res.notMatching = rawSerialize(buildTreeStruct(res.notMatching));
 	return res;
 }
 export function serialize(treeStruct) {
-	if (isString(treeStruct)) return utfSpecial2escaped(treeStruct.str);
-	if (isStep(treeStruct)) return treeStruct.step.map(serialize).join('');
-	if (isAlt(treeStruct)) return `(${treeStruct.alt.map(serialize).join('|')})`;
+	return utfSpecial2escaped(rawSerialize(treeStruct));
+}
+export function rawSerialize(treeStruct) {
+	if (isString(treeStruct)) return treeStruct.str;
+	if (isStep(treeStruct)) return treeStruct.step.map(rawSerialize).join('');
+	if (isAlt(treeStruct)) return `(${treeStruct.alt.map(rawSerialize).join('|')})`;
 	throw new Error(`Error: how to serialize ${JSON.stringify(treeStruct)} RAW: ${treeStruct}`);
 }
 
diff --git a/src/dictionary.test.mjs b/src/dictionary.test.mjs
index 027da3867300d6e5b4feca1caf2c9c4af3480fdf..924c5e9839ad22ee8c1ccd1bec8574069db92c0d 100644
--- a/src/dictionary.test.mjs
+++ b/src/dictionary.test.mjs
@@ -45,7 +45,12 @@ test('_\\@\\@_@@_@\\@_ can be ambiguous with get, dryGet or not with rawGet, raw
 	t.is(dico.splitDryGet(0)[0], '_');
 	t.is(dico.splitDryGet(0)[1], ')@@');
 });
-
+test('\\{\\} work fine', t => {
+	const dico = new app.Dictionary('\\{\\}');
+	t.is(dico.length, 1);
+	t.is(dico.serialize(), '\\{\\}@@\\{\\}');
+	t.is(dico.dryGet(0), '{}@@{}');
+});
 test('get is time tracked', async t => {
 	const dico = new app.Dictionary('(a|b|c)d(e|f|g)');
 	dico.get(1);