diff --git a/.gitattributes b/.gitattributes
index 05c7469486844c9223482b05ded245e68a95d361..91434116d050a224e0f676a68ea47b63279057e0 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -5,36 +5,70 @@
 .git-blame-ignore-revs merge=union
 Changelog merge=union
 
-###############
-# BINARY: set #
-###############
-# built-in macro that also unsets the "text" and "diff" attributes
+##################################################
+# BINARY/CHECK-SYNTAX/INDENT/EOL-EOF: set/-unset #
+##################################################
 
-*.ico binary -check-eoleof
-*.icns binary -check-eoleof
+# note: "binary" is a built-in macro that also
+#       unsets the "text" and "diff" attributes
 
-*.eps binary -check-eoleof
-*.ps  binary -check-eoleof
-*.gif binary -check-eoleof
-*.jpg binary -check-eoleof
-*.png binary -check-eoleof
-*.svg binary -check-eoleof
+# note: set "check-eoleof" and "check-utf8" by default to all files
+* check-eoleof check-utf8
 
-*.odg binary -check-eoleof
-*.pdf binary -check-eoleof
+# note: unset "-check-eoleof" and "-check-utf8" for "binary"
+*.ico binary -check-eoleof -check-utf8
+*.icns binary -check-eoleof -check-utf8
 
-*.eot binary -check-eoleof
-*.woff binary -check-eoleof
+*.eps binary -check-eoleof -check-utf8
+*.ps  binary -check-eoleof -check-utf8
+*.gif binary -check-eoleof -check-utf8
+*.jpg binary -check-eoleof -check-utf8
+*.png binary -check-eoleof -check-utf8
+*.svg binary -check-eoleof -check-utf8
+
+*.odg binary -check-eoleof -check-utf8
+*.pdf binary -check-eoleof -check-utf8
+
+*.eot binary -check-eoleof -check-utf8
+*.woff binary -check-eoleof -check-utf8
 
 ###########################################
 # CHECK-SYNTAX/INDENT/EOL-EOF: set/-unset #
 ###########################################
 
+## Set "check-syntax" and "check-indent"
+
+# note: "check-syntax" includes already "check-eoleof"
 *.ml  check-syntax check-indent -check-eoleof
 *.mli check-syntax check-indent -check-eoleof
 
+## Unset "-check-eoleof"
+
+*.dot -check-eoleof
+
+/tests/spec/unfinished-oneline-acsl-comment.i -check-eoleof
 /doc/developer/check_api/run.oracle -check-eoleof
 
+## Unset "-check-utf8"
+
+/doc/training/developer/macros.tex -check-utf8
+
+/src/plugins/wp/doc/coqdoc/coqdoc.sty -check-utf8
+/src/plugins/wp/doc/manual/wp_logicvar.tex -check-utf8
+/src/plugins/wp/doc/manual/wp_store.tex -check-utf8
+
+# Don't check symbolic links (that gives an error)
+
+## Unset all: "-check-syntax -check-indent -check-eoleof -check-utf8"
+
+# Don't check symbolic links (that gives an error for check-utf8). Please checks only the linked target.
+/src/plugins/e-acsl/tests/builtin/utils -check-syntax -check-indent -check-eoleof -check-utf8
+/src/plugins/e-acsl/tests/format/utils  -check-syntax -check-indent -check-eoleof -check-utf8
+
+# File names that cannot be checked (due to sh: 1: Syntax error: Unterminated quoted string)
+/tests/syntax/foo\".c                 -check-syntax -check-indent -check-eoleof -check-utf8
+/tests/syntax/oracle/foo\".res.oracle -check-syntax -check-indent -check-eoleof -check-utf8
+
 #########################
 # HEADER_SPEC: CEA_LGPL #
 #########################
diff --git a/.gitignore b/.gitignore
index ebba842a7fe2aaac5df6d5b5400e80dd4d74b097..cb2bdbdfb9740ffd81853e6294b477ee066c4b99 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,8 +61,6 @@ autom4te.cache
 /devel_tools/fc-time
 /devel_tools/fc-memuse
 /bin/ocamldep_transitive_closure
-/bin/isutf8
-/bin/isutf8.exe
 
 #share
 /share/Makefile.config
diff --git a/bin/isutf8.ml b/bin/isutf8.ml
deleted file mode 100644
index 0e775f13502710afea395fa9aadb2686ca72b40d..0000000000000000000000000000000000000000
--- a/bin/isutf8.ml
+++ /dev/null
@@ -1,97 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  This file is part of Frama-C.                                         *)
-(*                                                                        *)
-(*  Copyright (C) 2007-2022                                               *)
-(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
-(*         alternatives)                                                  *)
-(*                                                                        *)
-(*  you can redistribute it and/or modify it under the terms of the GNU   *)
-(*  Lesser General Public License as published by the Free Software       *)
-(*  Foundation, version 2.1.                                              *)
-(*                                                                        *)
-(*  It is distributed in the hope that it will be useful,                 *)
-(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
-(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
-(*  GNU Lesser General Public License for more details.                   *)
-(*                                                                        *)
-(*  See the GNU Lesser General Public License version 2.1                 *)
-(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
-(*                                                                        *)
-(**************************************************************************)
-
-module StringSet = Set.Make(String)
-
-exception False
-
-let is_valid_utf8 filename =
-  let buf = Bytes.create 1024 in
-  try
-    let ic = open_in_bin filename in
-    let extra = ref 0 in
-    try
-      while true do
-        let n_bytes_read = input ic buf 0 1024 in
-        if n_bytes_read = 0 then raise End_of_file;
-        for i = 0 to n_bytes_read - 1 do
-          let c = Bytes.get_uint8 buf i in
-          (*Format.printf "extra: %d, read byte: %d (0x%x, char %c)@."
-            !extra c c (Char.chr c);*)
-          if !extra > 0 then begin
-            decr extra;
-            if c lsr 6 <> 2 then raise False
-          end
-          else
-          if c > 127 then begin
-            if c lsr 5 = 6 then extra := 1
-            else if c lsr 4 = 14 then extra := 2
-            else if c lsr 3 = 30 then extra := 3
-            else raise False
-          end;
-        done;
-      done;
-      close_in ic;
-      !extra = 0
-    with
-    | End_of_file ->
-      close_in ic;
-      !extra = 0
-    | False ->
-      close_in ic;
-      false
-  with
-  | Sys_error msg ->
-    (* possibly a non-existing file (e.g. with spaces); ignoring *)
-    Format.printf "isutf8: cannot open, ignoring file: %s (%s)@."
-      filename msg;
-    true
-
-(* usage: first argument is a file name containing a list of files
-   (one per line) to be checked; the remaining arguments are filenames
-   to be ignored during checking. *)
-let () =
-  if Array.length Sys.argv < 2 then begin
-    Format.printf "usage: %s file_list.txt [ignore1 ignore2 ...]@." Sys.argv.(0);
-    exit 0
-  end;
-  let errors = ref 0 in
-  let file_list_ic = open_in Sys.argv.(1) in
-  let to_ignore = StringSet.of_list (List.tl (Array.to_list Sys.argv)) in
-  begin
-    try
-      while true; do
-        let filename = input_line file_list_ic in
-        if not (StringSet.mem filename to_ignore)
-        && not (is_valid_utf8 filename) then begin
-          incr errors;
-          Format.printf "error: invalid UTF-8 in file: %s@." filename
-        end
-      done
-    with End_of_file ->
-      close_in file_list_ic
-  end;
-  if !errors > 0 then begin
-    Format.printf "Found %d file(s) with errors.@." !errors;
-    exit 1
-  end else
-    exit 0
diff --git a/doc/acsl_tutorial_slides/script b/doc/acsl_tutorial_slides/script
index 9ae7ac14fc9a221bdd569e7ab72818de6fcb03ee..cdc4a4df21dc4e088a7a06f8887812c150d8d51d 100644
--- a/doc/acsl_tutorial_slides/script
+++ b/doc/acsl_tutorial_slides/script
@@ -1,18 +1,18 @@
-* Faire un slide 0 avec le nom de celui qui présente et
+* Faire un slide 0 avec le nom de celui qui présente et
    l'URL pour Frama-C. Faire le discours sur ACSL qui est la
-glue faisant marcher plusieurs plug-ins complémentaires.
+glue faisant marcher plusieurs plug-ins complémentaires.
 
 * slide 1max.c
 
-montrer que l'on peut déjà vérifier la syntaxe des annotation
+montrer que l'on peut déjà vérifier la syntaxe des annotation
 en introduisant une erreur de syntaxe et en compilant depuis Emacs.
 Localiser l'erreur avec Emacs.
 
-Alors que l'idée des prés et posts est de prouver que la post tient
-en n'utilisant que le code de la fonction en supposant que la pré
-était satisfaite en entrée, la deuxième page montre l'utilisation
-de l'analyse de valeurs pour vérifier ces propriétés avec une
-exécution symbolique.
+Alors que l'idée des prés et posts est de prouver que la post tient
+en n'utilisant que le code de la fonction en supposant que la pré
+était satisfaite en entrée, la deuxième page montre l'utilisation
+de l'analyse de valeurs pour vérifier ces propriétés avec une
+exécution symbolique.
 
 * slide 2maxp.c
 
@@ -23,29 +23,29 @@ C'est pour montrer que ACSL supporte les pointeurs.
 Avertissements sur le fait que le langage logique est 
 un langage pur.
 Le && est commutatif. Parler de (*p) n'a pas de sens en
-général mais des propriétés telles que *p==*p sont
-vraies même si p n'est pas valide. Mieux vaut
-toujours écrire "\valid(p) && *p == ..."
+général mais des propriétés telles que *p==*p sont
+vraies même si p n'est pas valide. Mieux vaut
+toujours écrire "\valid(p) && *p == ..."
 
 * slide 4comp_part.c
 
-Attirer l'attention sur ce que c'est une spécification
-complète. Insister sur le fait que c'est très difficile
-d'en écrire en pratique (formelles ou non formelles) mais
-que les spécifications partielles sont utiles aussi
+Attirer l'attention sur ce que c'est une spécification
+complète. Insister sur le fait que c'est très difficile
+d'en écrire en pratique (formelles ou non formelles) mais
+que les spécifications partielles sont utiles aussi
 (et qu'on peut se servir d'ACSL pour en faire).
 
 * slide 5assigns_term.c
 
-A propos de spécifications complètes, c'est le bon moment
+A propos de spécifications complètes, c'est le bon moment
 pour parler des assigns et de la terminaison.
 
 * slide 6pred.c
 
-Les spécifications peuvent devenir plus élaborée en
-commençant par définir des prédicats utilisateurs.
-Ici, défini comme une fonction
+Les spécifications peuvent devenir plus élaborée en
+commençant par définir des prédicats utilisateurs.
+Ici, défini comme une fonction
 
 * slide 7pred.c
 
-Définition dans le style prolog du même prédicat.
+Définition dans le style prolog du même prédicat.
diff --git a/doc/developer/METADOC.txt b/doc/developer/METADOC.txt
index 229eedcfa07ba3b040e5d870fbc39729d26d2224..e17f478eed5b7fead89092dcdbd419fd6f54e0f8 100644
--- a/doc/developer/METADOC.txt
+++ b/doc/developer/METADOC.txt
@@ -1,25 +1,25 @@
 =========================================================================
-Ce fichier contient les règles à suivre pour écrire la doc du développeur
+Ce fichier contient les règles à suivre pour écrire la doc du développeur
 =========================================================================
 
-* Les instructions de "doc/www/src/metadoc.NE_PAS_ECRIRE" doivent être 
-  appliquées.
+* Les instructions de "doc/www/src/metadoc.NE_PAS_ECRIRE" doivent être 
+  appliquées.
 
 * Les fichiers portent l'extension .pretex pour permettre leur preprocessing
 
-* L'index doit être tenu à jour
+* L'index doit être tenu à jour
 
-* Les redondances dans l'index (deux entrées différentes correspondant à la
-  même chose) ne sont autorisées seulement si une des deux entrées référence
-  proprement l'autre à l'aide d'un tag "see".
+* Les redondances dans l'index (deux entrées différentes correspondant à la
+  même chose) ne sont autorisées seulement si une des deux entrées référence
+  proprement l'autre à l'aide d'un tag "see".
 
-* L'annexe "Changes" doit être tenue à jour.
+* L'annexe "Changes" doit être tenue à jour.
 
-* Les macros doivent être définies dans macros.tex
+* Les macros doivent être définies dans macros.tex
 
-* Les macros doivent être au maximum utilisées. 
+* Les macros doivent être au maximum utilisées. 
   En particulier:
-    o les environnements dérivés de "code" pour le code
+    o les environnements dérivés de "code" pour le code
         - autoconfcode pour les configure.in
         - makecode pour les makefile
 	- ccode pour le C
@@ -27,10 +27,10 @@ Ce fichier contient les r
 	- code pour les autres codes (ligne de commandes par exemple)
     o l'environnement "example" pour les exemples
     o l'environnement "important" pour les choses importantes
-    o l'environnement "convention" pour les conventions qu'un développeur doit
+    o l'environnement "convention" pour les conventions qu'un développeur doit
       respecter
-    o l'environnement "prereq" pour les prérequis nécessaires à la bonne
-      compréhension 
-    o les macros pour les noms de langage/d'outils (c'est la même macro
-      \langage à l'origine)
-    o les macros pour les entrées d'index
+    o l'environnement "prereq" pour les prérequis nécessaires à la bonne
+      compréhension 
+    o les macros pour les noms de langage/d'outils (c'est la même macro
+      \langage à l'origine)
+    o les macros pour les entrées d'index
diff --git a/doc/developer/TODO b/doc/developer/TODO
index b0d6d62fa4cd6003f481eaa747e38b6542c4ffac..489e0e1eebfc19d2b2b4009d7afda72c794fead4 100644
--- a/doc/developer/TODO
+++ b/doc/developer/TODO
@@ -18,26 +18,26 @@ Advance
   [advanced plugin development]
     o lien avec les exemples de chargement dynamique
   [refman]
-    o spécification du module "Type" dans répertoire "lib": 
-      ajouté un lien vers Section "Journalisation" quand cette 
-      dernière sera écrite.
+    o spécification du module "Type" dans répertoire "lib": 
+      ajouté un lien vers Section "Journalisation" quand cette 
+      dernière sera écrite.
 
 * Documentation des sources:
-    o test d'intégrité du code wrt plugin dev guide
+    o test d'intégrité du code wrt plugin dev guide
 
 * GUI:
-    o améliorer la doc: mieux expliquer comment utiliser les hooks pour coder 
-      les parties similaires à chaque greffon (panneau latéral, etc).
+    o améliorer la doc: mieux expliquer comment utiliser les hooks pour coder 
+      les parties similaires à chaque greffon (panneau latéral, etc).
     o GUI des greffons dynamiques
 
 Refman
 ======
 
 * Figure des makefiles: 
-    o ajouter le fait que Makefile.dynamic est généré à partir de 
+    o ajouter le fait que Makefile.dynamic est généré à partir de 
       Makefile.dynamic.internal/external
 
-* Makefile.dynamic: ce qui lui est spécifique
+* Makefile.dynamic: ce qui lui est spécifique
 
 List of recommendations (?)
 =======================
diff --git a/doc/index.html b/doc/index.html
index 961f99ad1f9635f02b6a19a1fc852f072d334592..67520447c419c95d4faca4fc20d469b793d83318 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -4,7 +4,7 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 
 <html>
 <head>
-<meta http-equiv="Content-Type" content="text/xhtml; charset=ISO-8859-1"/>
+<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8"/>
 <link rel="stylesheet" href="style.css" type="text/css"/>
 <title>Frama-C</title>
 </head>
@@ -125,7 +125,7 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       (<a href="wp/Spec/index.html">spec</a> : <tt>cd wp/Spec; make</tt>)
       (<a href="wp/Notes/index.html">informal notes</a> : <tt>cd wp/Notes; make</tt>)
       (<a href="wp/Implem/index.html">implementation</a> : <tt>cd wp/Implem; make</tt>)
-      (<a href="wp/Coq/doc/toc.html">modélisation COQ</a>)
+      (<a href="wp/Coq/doc/toc.html">modélisation COQ</a>)
       (<a href="code/wp/metrics.html">metrics</a> : <tt>make Wp_metrics)</tt>)
     </li><li>
       <a href="code/cxx_elsa/index.html">cxx</a>
diff --git a/doc/makeLatex b/doc/makeLatex
index c0414b80e350006f150b066e500f4afddf609f94..abcd85df97cf381080aa0ecbcea9b005930f6174 100644
--- a/doc/makeLatex
+++ b/doc/makeLatex
@@ -1,22 +1,22 @@
-# Fichier à inclure dans son makefile pour faire des compilation latex.
-# L'utilisateur doit définir certaines variables (notées +)
-# et peut en option en (re)définir d'autres (notées *) :
+# Fichier à inclure dans son makefile pour faire des compilation latex.
+# L'utilisateur doit définir certaines variables (notées +)
+# et peut en option en (re)définir d'autres (notées *) :
 #
-# === outils (peuvent être redéfinis si on veut préciser le path par exemple) :
+# === outils (peuvent être redéfinis si on veut préciser le path par exemple) :
 # TEXI (= texi2dvi)
 # HEVEA (HEVEAOPTS), HACHA
 
 # === fichiers :
-# * TOPTEX=top.tex : déterminé par défaut par un grep de documentclass
-# * GENERATED_TEX= : fichiers .tex générés (vide par défaut)
+# * TOPTEX=top.tex : déterminé par défaut par un grep de documentclass
+# * GENERATED_TEX= : fichiers .tex générés (vide par défaut)
 #
 # * FIGURES_TODO= : noms de figures sans extension (-> .eps + .pdf)
 #                   (suppose qu'on a le .eps et le .pdf 
 #                   ou qu'on sait a une cible pour les fabriquer...)
 #
-# * HVA=macros.hva : si on a besoin de définir des choses pour hevea
+# * HVA=macros.hva : si on a besoin de définir des choses pour hevea
 #
-# Les figures (fichiers .fig) sont compilés en postscript et/ou en pdf
+# Les figures (fichiers .fig) sont compilés en postscript et/ou en pdf
 # en fonction des besoins. Si on souhaite compiler une figure en latex
 # (formules, etc) il faut simplement nommer le fichier *.tex.fig
 #
@@ -25,14 +25,14 @@
 # debug_latex, 
 # clean_latex, clean_hevea, clean
 #
-# loop : lance gv sur TOPTEX.ps et une boucle de compilation qui met à jour
-#        le contenu visualisé.
-#        Il est conseillé d'utiliser plutôt la cible 'sloop' pour ne pas avoir
-#        un écran qui défile en permanence.
+# loop : lance gv sur TOPTEX.ps et une boucle de compilation qui met à jour
+#        le contenu visualisé.
+#        Il est conseillé d'utiliser plutôt la cible 'sloop' pour ne pas avoir
+#        un écran qui défile en permanence.
 #------------------------------------------------------------------------------
 
 
-# l'avantage de texi2dvi par rapport à latex, 
+# l'avantage de texi2dvi par rapport à latex, 
 # c'est qu'il s'occupe de l'index, de la biblio,
 # et de lancer latex autant de fois qu'il le faut.
 TEXI?=texi2dvi
@@ -73,13 +73,13 @@ FIGURES_EPS = $(SIMPLE_FIGURES_EPS) $(FIGURES_PSTEX)
 FIGURES_PDF = $(SIMPLE_FIGURES_PDF) $(FIGURES_PDFTEX)
 GENERATED_FIGURES = $(FIGURES_EPS) $(FIGURES_PDF) $(FIGURES_TEX)
 
-# plus utile : hevea se débrouille tout seul.
+# plus utile : hevea se débrouille tout seul.
 #IMAGES_GIF = $(shell grep -s gif $(SRC).html | grep "^[ ]*<IMG" | sed -e 's=[^"]*"\(.*.gif\).*=\1=')
 
-# TODO : à étendre au cas d'une biblio multiple (plusieurs fichiers .bib).
+# TODO : à étendre au cas d'une biblio multiple (plusieurs fichiers .bib).
 BIB_NAME = $(shell grep -h "bibliography{" $(TOPTEX) \
               | sed -e 's/\\bibliography{\(.*\)}/\1.bib/')
-# TODO: à modifier pour chercher dans BIBINPUTS
+# TODO: à modifier pour chercher dans BIBINPUTS
 
 ifneq ($(strip $(BIB_NAME)),)
   BIB_FILE = $(BIB_NAME)
@@ -115,7 +115,7 @@ debug_latex :
 	@echo "HVA = $(HVA)"
 
 #------------------------------------------------------------------------------
-# Dépendances :
+# Dépendances :
 
 $(SRC).dvi : $(ALL_TEX) $(FIGURES_TEX) $(FIGURES_EPS) $(BBL_FILE) $(FIGURES_PDF)
 # no <TAB> here
@@ -129,7 +129,7 @@ $(SRC).html : $(ALL_TEX) $(SRC).pdf $(SRC).bbl
 #------------------------------------------------------------------------------
 # Regles de production :
 
-# dessins .eps à partir des .fig de xfig
+# dessins .eps à partir des .fig de xfig
 %.eps : %.tex.fig
 	fig2dev -L pstex $< $@
 
@@ -160,7 +160,7 @@ $(SRC).html : $(ALL_TEX) $(SRC).pdf $(SRC).bbl
 	$(TEXI2DVI)  $<
 
 $(SRC).bbl : $(BIB_FILE)
-	@echo "=== Fichier .bib plus récent -> effacement du .bbl"
+	@echo "=== Fichier .bib plus récent -> effacement du .bbl"
 	rm -f $(SRC).bbl
 
 
@@ -193,9 +193,9 @@ $(SRC).html: $(HVA) $(SRC).tex
 index.html: $(SRC).html
 	$(HACHA) -o index.html $(SRC).html
 
-# ceci n'est normalement plus utile sous UNIX grace à l'option -fix de hevea
+# ceci n'est normalement plus utile sous UNIX grace à l'option -fix de hevea
 #$(IMAGES_GIF) : $(SRC).image.tex
-	#@echo "=== Génération des images gif"
+	#@echo "=== Génération des images gif"
 	#imagen $(SRC)
 
 #------------------------------------------------------------------------------
@@ -228,14 +228,14 @@ sloop:
 
 #------------------------------------------------------------------------------
 clean_hevea :
-	@echo "=== Ménage des fichiers hevea"
+	@echo "=== Ménage des fichiers hevea"
 	rm -f $(SRC).html $(SRC).h{toc,aux,ind,idx} $(SRC).cb
 	rm -f index.html $(SRC)[0-9][0-9][0-9].html $(SRC).css
 	rm -f $(SRC).image.cb $(SRC).image.tex $(SRC)[0-9][0-9][0-9].gif 
 	rm -f previous_motif.gif next_motif.gif contents_motif.gif
 
 clean_tmp_tex :
-	@echo "=== Ménage des fichiers temporaires de latex"
+	@echo "=== Ménage des fichiers temporaires de latex"
 	rm -f $(SRC).aux
 	rm -f $(SRC).log
 	rm -f $(SRC).blg
@@ -249,12 +249,12 @@ clean_tmp_tex :
 	rm -f $(SRC).out
 
 clean_latex : clean_tmp_tex
-	@echo "=== Ménage des fichiers latex"
+	@echo "=== Ménage des fichiers latex"
 	rm -f $(SRC).bbl
 	rm -f $(SRC).dvi
 	rm -f $(SRC).ps
 	rm -f $(SRC).pdf
-	@echo "=== Ménage des figures"
+	@echo "=== Ménage des figures"
 	rm -f *.~[0-9]*~ *.bak *~
 	rm -f $(GENERATED_FIGURES)
 
diff --git a/doc/scope/M.v b/doc/scope/M.v
index f9758e8a131b33ca06f9d75c757a8a3a0da352d3..f57ee83e7a37cf88dfeffbd9e2a7b290900979a4 100644
--- a/doc/scope/M.v
+++ b/doc/scope/M.v
@@ -175,7 +175,7 @@ Parameter ma : inst -> inst -> mark.
 Axiom maStart : forall L I, ma L I = Start -> L = I.
 Axiom maL : forall L, ma L L = Start.
 
-(** propriété du marquage après stabilité *)
+(** propriété du marquage après stabilité *)
 Axiom Pma : forall L i', 
   ma L i' = lmerge (List.map (fun i => trans i (ma L i)) (pred i')).
 
diff --git a/doc/scope/Makefile b/doc/scope/Makefile
index ac55e30f1991ffdb38612fdfcb1ee248d6e01ce8..5f47605deb544a3fe1371695312c2207b21d11f3 100644
--- a/doc/scope/Makefile
+++ b/doc/scope/Makefile
@@ -20,7 +20,7 @@
 #                                                                        #
 ##########################################################################
 
-#vide : pour ne pas utiliser de règles implicites
+#vide : pour ne pas utiliser de règles implicites
 .SUFFIXE:
 .PHONY: clean all debug
 
diff --git a/doc/value/README b/doc/value/README
index 8c0abd89e17425eda471574f518ff91775e453d0..cf8e721bb34ecc977620a5554f410251bfe47912 100644
--- a/doc/value/README
+++ b/doc/value/README
@@ -1,13 +1,13 @@
 
-Si vous n'êtes pas un développeur de Value, vous avez
-reçu ce document par erreur, et vous pouvez l'ignorer.
+Si vous n'êtes pas un développeur de Value, vous avez
+reçu ce document par erreur, et vous pouvez l'ignorer.
 
 Conventions s'appliquant dans la documentation de Value :
 
 * Le "plug-in d'analyse de valeur" s'appelle "the value analysis plug-in",
   "the plug-in", "the value analysis" ou "the analysis". 
-  Les deux derniers sont à utiliser quand le sujet de l'action
-  peut être une analyse particulière d'un code particulier.
+  Les deux derniers sont à utiliser quand le sujet de l'action
+  peut être une analyse particulière d'un code particulier.
   Utiliser "Frama-C" si et seulement si Frama-C est
   l'interface visible pour l'action dont il est question, par exemple :
 
@@ -20,19 +20,19 @@ synthetic information on the behavior of analyzed functions:
 inputs, outputs, and alarms.
   
 * La personne qui utilise Value s'appelle "l'utilisateur" ;
-la personne qui a écrit l'application s'appelle "programmeur",
+la personne qui a écrit l'application s'appelle "programmeur",
 mais on n'a pas souvent de raison de parler d'elle.
 
-* Sauf cas particulier, si un exemple contient le point d'entrée,
-alors ce point d'entrée s'appelle \verb|main|. Un exemple peut
+* Sauf cas particulier, si un exemple contient le point d'entrée,
+alors ce point d'entrée s'appelle \verb|main|. Un exemple peut
 aussi ne pas contenir de fonction \verb|main|, ce qui indique
 qu'il ne s'agit que d'une partie d'un projet plus grand.
 
-* Le shell n'est pas csh. Le shell peut être bash, zsh, le prompt
-peut avoir été customisé par l'utilisateur, ou l'utilisateur peut
-être sous Windows et avoir un prompt de la forme "C:\>". Donc,
-on n'écrit pas de prompt précédant les commandes à taper au
-prompt, sinon l'utilisateur il croit que ça fait partie de la commande.
-Le style "verbatim" fait partie des éléments qui aident à reconnaître
-les commandes qui peuvent être tappées, et puis on peut/pourra aussi
+* Le shell n'est pas csh. Le shell peut être bash, zsh, le prompt
+peut avoir été customisé par l'utilisateur, ou l'utilisateur peut
+être sous Windows et avoir un prompt de la forme "C:\>". Donc,
+on n'écrit pas de prompt précédant les commandes à taper au
+prompt, sinon l'utilisateur il croit que ça fait partie de la commande.
+Le style "verbatim" fait partie des éléments qui aident à reconnaître
+les commandes qui peuvent être tappées, et puis on peut/pourra aussi
 tout faire dans l'interface graphique.
diff --git a/share/Makefile.linting b/share/Makefile.linting
index af2e2ae506d5aeda0f2c47753616c40e9c579d8f..f22e52a19904ae005b929704a521debee43381e8 100644
--- a/share/Makefile.linting
+++ b/share/Makefile.linting
@@ -24,14 +24,53 @@
 # Code prettyfication and lint #
 ################################
 
-SED?=sed
-ISED?=sed -i
+# make lint includes:
+# - make check-utf8: valid UTF-8 encoding
+# - make check-eoleof: EOF preceded by an EOL
+# - make check-syntax: EOF preceded by an EOL + no TAB + no BLANK at the end
+# - make check-indent: valid indentation
+# For all these targets (and the corresponding fix-XXX), it is possible to restrict the search to a sub-directory:
+# - make LINT_DIR=<subdir> <lint-target>
+# It is possible to force the action to given files:
+# - make LINT_FILE=<file> <lint-target>
+# Notes:
+# - when LINT_FILE is given, .gitattributes and LINT_DIR are ignored;
+# - to use fix-utf8 target, the variable LINT_FROM_ENCODING=<from-encoding-name>
+#   has to be set.
+
+# make clean-lint (removing linting targets) includes
+# - make clean-utf8
+# - make clean-eoleof
+# - make clean-syntax
+# - make clean-indent
+
+################################
+## Default variables
+
+IS_UTF8 ?= iconv -f UTF-8 -t UTF-8
+TO_UTF8 ?= iconv -t UTF-8 -f
+
+OCP_INDENT ?= ocp-indent
+
+# Default values necessary for
+#   LINT_MAKEFILE=<this-makefile> make -f <this-makefile> <lint-target>`
+# Otherwise theses variables are defined into share/Makefile.common
+SED     ?= LC_ALL=C sed
+ISED    ?= sed -i
+GIT     ?= git
+MKDIR   ?= mkdir -p
+MV      ?= mv
+RM      ?= rm -f
+TOUCH   ?= touch
 
 ############
 
 # Can be set to the path of that makefile
 LINT_MAKEFILE ?=
 
+# Can be set to a sub-directory to restrict the checking
+LINT_DIR ?= .
+
 ################################
 
 LINT.makefile=$(wildcard $(LINT_MAKEFILE))
@@ -48,21 +87,21 @@ endif
 ## CHECK ocp-indent VERSION
 
 .lint/check-ocp-indent-version:
-	if command -v ocp-indent >/dev/null; then \
-		if [ -z "$(shell ocp-indent --version)" ]; then echo "warning: ocp-indent returned an empty string, assuming it is the correct version"; \
+	if command -v $(OCP_INDENT) >/dev/null; then \
+		if [ -z "$(shell $(OCP_INDENT) --version)" ]; then echo "warning: $(OCP_INDENT) returned an empty string, assuming it is the correct version"; \
 		else \
-			$(eval ocp_version_major := $(shell ocp-indent --version | $(SED) -E "s/^([0-9]+)\.[0-9]+\..*/\1/")) \
-			$(eval ocp_version_minor := $(shell ocp-indent --version | $(SED) -E "s/^[0-9]+\.([0-9]+)\..*/\1/")) \
+			$(eval ocp_version_major := $(shell $(OCP_INDENT) --version | $(SED) -E "s/^([0-9]+)\.[0-9]+\..*/\1/")) \
+			$(eval ocp_version_minor := $(shell $(OCP_INDENT) --version | $(SED) -E "s/^[0-9]+\.([0-9]+)\..*/\1/")) \
 			if [ "$(ocp_version_major)" -lt 1 -o "$(ocp_version_minor)" -lt 7 ]; then \
-				echo "error: ocp-indent 1.7.0 required for linting (got $(ocp_version_major).$(ocp_version_minor))"; \
+				echo "error: $(OCP_INDENT) 1.7.0 required for linting (got $(ocp_version_major).$(ocp_version_minor))"; \
 			exit 1; \
 			fi; \
 		fi; \
 	else \
 		exit 1; \
 	fi;
-	mkdir -p $(dir $@)
-	touch $@
+	$(MKDIR) $(dir $@)
+	$(TOUCH) $@
 
 ###############
 ## Main target
@@ -72,12 +111,12 @@ ifeq ($(LINT.HAS_GIT),)
 
 .PHONY:
 lint:
-	echo "'make lint' requires git"
-	echo "but,that is not the case of 'make LINT_FILE=<file> check-syntax'"
+	echo "'make lint' requires a git repository but, that is not"
+	echo "the case for example with 'make LINT_FILE=<file> check-syntax'"
 
 else
 
-lint: check-eoleof check-syntax check-indent
+lint: check-eoleof check-syntax check-indent check-utf8
 
 endif
 
@@ -93,32 +132,53 @@ clean-lint:
 
 clean:: clean-lint
 
+#### clean-check-XXX targets
+
+LINT.clean-targets= \
+        clean-check-eoleof clean-check-utf8 clean-check-syntax clean-check-ident
+.PHONY: clean-check-eoleof clean-check-utf8 clean-check-syntax clean-check-ident
+
+# Generic rule
+$(LINT.clean-targets):
+	echo "[LINT] Cleaning $(patsubst clean-%,%,$@) targets..."
+	find .lint -type f -name \*.$(patsubst clean-%,%,$@) | xargs -n 10 $(RM)
+
 ###############################
 
 ifeq ($(LINT_FILE),)
 
 # No lint file given
 
-.PHONY: check-eoleof
-check-eoleof:
-	git ls-files -z \
-        | git check-attr --stdin -z check-eoleof \
-        | $(SED) -zne 'x;n;n;s/^set$$//;t print;b;:print;x;p' \
-        | xargs --null -IXX sh -c '$(LINT.make) LINT_FILE="XX" check-eoleof || exit 255'
+LINT.dir=$(wildcard $(LINT_DIR))
 
-.PHONY: check-syntax
-check-syntax:
-	git ls-files -z  \
-        | git check-attr --stdin -z check-syntax \
+#### check-XXX targets
+
+LINT.check-targets= \
+        check-syntax check-indent check-eoleof check-utf8
+.PHONY: check-syntax check-indent check-eoleof check-utf8
+
+# Generic rule
+$(LINT.check-targets):
+	echo "[LINT] Checking from GIT attribute $@..."
+	$(GIT) ls-files $(LINT.dir) -z \
+        | $(GIT) check-attr --stdin -z $@ \
         | $(SED) -zne 'x;n;n;s/^set$$//;t print;b;:print;x;p' \
-        | xargs --null -IXX sh -c '$(LINT.make) LINT_FILE="XX" check-syntax || exit 255'
+        | xargs --null -IXX sh -c '$(LINT.make) LINT_FILE="XX" $@ || exit 255'
 
-.PHONY: check-indent
-check-indent:
-	git ls-files -z  \
-        | git check-attr --stdin -z check-indent \
+#### fix-XXX targets
+
+LINT.fix-targets= \
+        fix-eoleof fix-utf8 fix-syntax fix-ident
+.PHONY: fix-eoleof fix-utf8 fix-syntax fix-ident
+
+# Generic rule
+$(LINT.fix-targets):
+	echo "[LINT] Fixing from GIT attribute $(patsubst fix-%,check-%,$@)..."
+	$(GIT) ls-files $(LINT.dir) -z \
+        | $(GIT) check-attr --stdin -z $(patsubst fix-%,check-%,$@) \
         | $(SED) -zne 'x;n;n;s/^set$$//;t print;b;:print;x;p' \
-        | xargs --null -IXX sh -c '$(LINT.make) LINT_FILE="XX" check-indent || exit 255'
+        | xargs --null -IXX sh -c '$(LINT.make) LINT_FILE="XX" $@ || exit 255'
+
 
 else # LINT_FILE are given
 
@@ -126,16 +186,21 @@ else # LINT_FILE are given
 
 LINT_FILE.list=$(addprefix .lint/,$(wildcard $(LINT_FILE)))
 
+LINT_FILE.check-utf8= $(addsuffix .check-utf8,$(LINT_FILE.list))
 LINT_FILE.check-eoleof= $(addsuffix .check-eoleof,$(LINT_FILE.list))
 LINT_FILE.check-syntax= $(addsuffix .check-syntax,$(LINT_FILE.list))
 LINT_FILE.check-indent= $(addsuffix .check-indent,$(LINT_FILE.list))
 
+LINT_FILE.fix-utf8= $(addsuffix .fix-utf8,$(LINT_FILE.list))
 LINT_FILE.fix-eoleof= $(addsuffix .fix-eoleof,$(LINT_FILE.list))
 LINT_FILE.fix-syntax= $(addsuffix .fix-syntax,$(LINT_FILE.list))
 LINT_FILE.fix-indent= $(addsuffix .fix-indent,$(LINT_FILE.list))
 
 ## check-XXX targets
 
+.PHONY: check-utf8
+check-utf8: $(LINT_FILE.check-utf8)
+
 .PHONY: check-eoleof
 check-eoleof: $(LINT_FILE.check-eoleof)
 
@@ -147,39 +212,78 @@ check-indent: $(LINT_FILE.check-indent)
 
 ## fix-XXX targets
 
-.PHONY: fix-syntax
-fix-syntax: $(LINT_FILE.fix-syntax)
+.PHONY: fix-utf8
+fix-utf8: $(LINT_FILE.fix-utf8)
 
 .PHONY: fix-eoleof
 fix-eoleof: $(LINT_FILE.fix-eoleof)
 
+.PHONY: fix-syntax
+fix-syntax: $(LINT_FILE.fix-syntax)
+
 .PHONY: fix-indent
 fix-indent: $(LINT_FILE.fix-indent)
 
 endif
 
+###############################
+## UTF8 ASPECT
+
+$(LINT_FILE.check-utf8): .lint/%.check-utf8: %
+	echo "Check UTF8: $<"
+	if ! $(IS_UTF8) $< > /dev/null; \
+        then \
+          echo "File $< uses an invalid UTF-8 encoding."; \
+          echo "Please fixe it manualy or in running: make LINT_FROM_ENCODING=<ENCODING-NAME> LINT_FILE=$< fix-utf8";\
+          echo "The next command may help you to find that <ENCODING-NAME>: file $<";\
+          exit 1; \
+        fi
+	$(MKDIR) $(dir $@)
+	$(TOUCH) $@
+
+ifneq ($(LINT_FROM_ENCODING),)
+
+.PHONY: $(LINT_FILE.fix-utf8)
+$(LINT_FILE.fix-utf8): .lint/%.fix-utf8: %
+	if ! $(IS_UTF8) $< > /dev/null 2> /dev/null; \
+        then \
+          echo "Fixes UTF8 (from $(LINT_FROM_ENCODING)): $<"; \
+          if ! $(TO_UTF8) $(LINT_FROM_ENCODING) $< > $<.tmp; then exit 1; fi; \
+           $(MV) $<.tmp $<; \
+        fi
+	$(MKDIR) $(dir $@)
+	$(TOUCH) .lint/$<.check-utf8 # no more need of check-indent
+
+else
+
+$(LINT_FILE.fix-utf8): .lint/%.fix-utf8: % .lint/check-ocp-indent-version
+	$(error "Target fix-utf8 requires to define LINT_FROM_ENCODING variable")
+
+endif # LINT_FROM_ENCODING
+
 ###############################
 ## INDENTATION ASPECT
 
 $(LINT_FILE.check-indent): .lint/%.check-indent: % .lint/check-ocp-indent-version
 	echo "Check indent: $<"
-	ocp-indent $< > $<.tmp
+	$(OCP_INDENT) $< > $<.tmp
 	if cmp -s $< $<.tmp; \
-        then rm -f $<.tmp; \
+        then $(RM) $<.tmp; \
         else \
           echo "File $< is not indented correctly."; \
           echo "Please run: make LINT_FILE=$< fix-indent";\
-          rm $<.tmp; \
+          $(RM) $<.tmp; \
           exit 1; \
         fi
-	mkdir -p $(dir $@)
-	touch $@
+	$(MKDIR) $(dir $@)
+	$(TOUCH) $@
 
+.PHONY: $(LINT_FILE.fix-indent)
 $(LINT_FILE.fix-indent): .lint/%.fix-indent: % .lint/check-ocp-indent-version
 	echo "Fixes indent: $<"
-	ocp-indent -i $<
-	mkdir -p $(dir $@)
-	touch .lint/$<.check-indent # no more need of check-indent
+	$(OCP_INDENT) -i $<
+	$(MKDIR) $(dir $@)
+	$(TOUCH) .lint/$<.check-indent # no more need of check-indent
 
 ###############################
 ## EOL EOF ASPECT (included by check-syntax target)
@@ -198,14 +302,16 @@ $(LINT_FILE.check-eoleof): .lint/%.check-eoleof: %
           echo "Please run: make LINT_FILE=$< fix-eoleof"; \
           exit 1 ; \
         fi
-	mkdir -p $(dir $@)
-	touch $@
+	$(MKDIR) $(dir $@)
+	$(TOUCH) $@
 
+# The real target is a check-XXX one
+.PHONY: $(LINT_FILE.fix-eoleof)
 $(LINT_FILE.fix-eoleof): .lint/%.fix-eoleof: %
 	echo "Fixes EOL EOF: $<"
 	$(ISED) -e '$$a\' $<
-	mkdir -p $(dir $@)
-	touch .lint/$<.check-eoleof # no more need of this checking
+	$(MKDIR) $(dir $@)
+	$(TOUCH) .lint/$<.check-eoleof # no more need of this checking
 
 %.fix-eoleof: LC_ALL = C
 
@@ -233,9 +339,11 @@ $(LINT_FILE.check-syntax): .lint/%.check-syntax: %
           echo "Please run: make LINT_FILE=$< fix-syntax"; \
           exit 1 ; \
         fi
-	mkdir -p $(dir $@)
-	touch $@
+	$(MKDIR) $(dir $@)
+	$(TOUCH) $@
 
+# The real target is a check-XXX one
+.PHONY: $(LINT_FILE.fix-syntax)
 $(LINT_FILE.fix-syntax): .lint/%.fix-syntax: %
 	echo "Fixes syntax: $<"
 	$(ISED) -e 's/^ *\t\+/ /' $<
@@ -246,11 +354,11 @@ $(LINT_FILE.fix-syntax): .lint/%.fix-syntax: %
         else \
           while tail -n -1 $< | grep -l -e '^[ \t]*$$'; do \
             head -n -1 $< > $<.tmp; \
-            mv $<.tmp $<; \
+            $(MV) $<.tmp $<; \
           done; \
         fi
-	mkdir -p $(dir $@)
-	touch .lint/$<.check-syntax # no more need of check-syntax
+	$(MKDIR) $(dir $@)
+	$(TOUCH) .lint/$<.check-syntax # no more need of check-syntax
 
 # Avoid a UTF-8 locale at all cost: in such setting, sed does not work
 # reliably if you happen to have latin-1 encoding somewhere,
diff --git a/src/plugins/e-acsl/examples/ensuresec/.gitignore b/src/plugins/e-acsl/examples/ensuresec/.gitignore
index 624a0d90452b7edfc6a43b3a7409e123d5dd0ac3..48f917578b41ed6b873e778abb6c5869fd01af2f 100644
--- a/src/plugins/e-acsl/examples/ensuresec/.gitignore
+++ b/src/plugins/e-acsl/examples/ensuresec/.gitignore
@@ -1,3 +1,3 @@
 build/
 __pycache__/
-.env
\ No newline at end of file
+.env
diff --git a/src/plugins/instantiate/README.md b/src/plugins/instantiate/README.md
index bf55ae2cf31a74fe80eb1d587adaa83803c8a03e..f54df561537931255c333ad87e782322275b535c 100644
--- a/src/plugins/instantiate/README.md
+++ b/src/plugins/instantiate/README.md
@@ -127,4 +127,4 @@ let () = Transform.register (module struct
   end)
 ```
 
-The role and types of each function is documented in `Instantiator_builder.mli`.
\ No newline at end of file
+The role and types of each function is documented in `Instantiator_builder.mli`.
diff --git a/src/plugins/server/tests/batch/wrong.json b/src/plugins/server/tests/batch/wrong.json
index 0178e8af2950cbc6b6a49d98367265e2bf993989..3c5f5262d12e7719a49df8d8fca4607f8db4b1b0 100644
--- a/src/plugins/server/tests/batch/wrong.json
+++ b/src/plugins/server/tests/batch/wrong.json
@@ -1,4 +1,4 @@
 [
   { id:"unknown request", request:"kernel.unknown", data:null, comment:"the request doesn't exist" },
   { id:"wrong data", request:"kernel.ast.printFunction", data:{f1:1, f2:{x:1, y:2}, f3:null}, comment:"ident is expected, object is given" }
-]
\ No newline at end of file
+]
diff --git a/src/plugins/value/legacy/TOREMOVE b/src/plugins/value/legacy/TOREMOVE
index ffa44b40808f3595a318a93d84a20e6dd73f20ad..a45847d25ad5d534973f2563e1c31130ecacab8f 100644
--- a/src/plugins/value/legacy/TOREMOVE
+++ b/src/plugins/value/legacy/TOREMOVE
@@ -8,4 +8,4 @@
 
 
 To be moved elsewhere, probably in domains/cvalue or in engine:
-  eval_annots, eval_terms
\ No newline at end of file
+  eval_annots, eval_terms