diff --git a/dev/docker/Dockerfile b/dev/docker/Dockerfile
index 2ee81468180c2b4b6409b8e99e890fc81472d184..96e366bce95cdb40b26007f7b525701c4b407d30 100644
--- a/dev/docker/Dockerfile
+++ b/dev/docker/Dockerfile
@@ -281,7 +281,6 @@ RUN rm -rf /home/opam/.opam/${OCAML_VERSION}/lib/alt-ergo
 RUN rm -rf /home/opam/.opam/${OCAML_VERSION}/lib/lablgtk3
 RUN rm -rf /home/opam/.opam/${OCAML_VERSION}/lib/lablgtk3-sourceview3
 RUN rm -rf /home/opam/.opam/${OCAML_VERSION}/lib/ppx_deriving
-RUN rm -rf /home/opam/.opam/${OCAML_VERSION}/lib/ppx_import
 RUN rm -rf /home/opam/.opam/${OCAML_VERSION}/lib/ppx_tools
 RUN rm -rf /home/opam/.opam/${OCAML_VERSION}/lib/ppxlib
 RUN rm -rf /home/opam/.opam/${OCAML_VERSION}/lib/psmt2-frontend
diff --git a/nix/frama-c.nix b/nix/frama-c.nix
index 62ca10893d07216c6b1d7e155eab94fce8986321..bdf835c48ff6e431cbdbcad714d56606ac53be05 100644
--- a/nix/frama-c.nix
+++ b/nix/frama-c.nix
@@ -39,7 +39,6 @@
 , ppx_deriving
 , ppx_deriving_yaml
 , ppx_deriving_yojson
-, ppx_import
 , unionFind
 , yojson
 , which
@@ -101,7 +100,6 @@ stdenvNoCC.mkDerivation rec {
     ppx_deriving
     ppx_deriving_yaml
     ppx_deriving_yojson
-    ppx_import
     unionFind
     yojson
     which
diff --git a/nix/internal-tests.nix b/nix/internal-tests.nix
index 48e04ae1ac9118583330ef6b08b856f875d7ac2c..67fae7c79d84c1327fb351366f0fad4a67d92d95 100644
--- a/nix/internal-tests.nix
+++ b/nix/internal-tests.nix
@@ -33,7 +33,6 @@
 , ppx_deriving
 , ppx_deriving_yaml
 , ppx_deriving_yojson
-, ppx_import
 , unionFind
 , yojson
 , which
@@ -96,7 +95,6 @@ stdenvNoCC.mkDerivation rec {
     ppx_deriving
     ppx_deriving_yaml
     ppx_deriving_yojson
-    ppx_import
     unionFind
     yojson
     which
diff --git a/opam b/opam
index 8e7573f960579ea10a17eeac9c35cb066a25f496..af2c86a95c4de67095fe6ef0c0865819b44abb44 100644
--- a/opam
+++ b/opam
@@ -145,7 +145,6 @@ depends: [
   "ppx_deriving"
   "ppx_deriving_yojson"
   "ppx_deriving_yaml" { >= "0.2.0" }
-  "ppx_import"
 
   # GTK3 disabled on macOS (segfaults), and made optional on Windows
   # (due to complex situation with Cygwin + MinGW).
diff --git a/reference-configuration.md b/reference-configuration.md
index 4a854ce176a61be63be2cd6f4f9764946f24ffb4..f66b07a9bee6e76466d0a59c2a1b82a644c18b69 100644
--- a/reference-configuration.md
+++ b/reference-configuration.md
@@ -13,7 +13,6 @@ compiling Frama-C 28.1.
 - ocamlgraph.2.1.0
 - ppx_deriving_yaml.0.2.1
 - ppx_deriving_yojson.3.7.0
-- ppx_import.1.10.0
 - unionFind.20220122
 - why3.1.7.1
 - yojson.2.0.2
diff --git a/src/dune b/src/dune
index 1df313dfe3b14cf5b89e8942fcd3e73b1a2e9e23..4e30a8be96104f936abe77828007e05be04e3a6e 100644
--- a/src/dune
+++ b/src/dune
@@ -37,7 +37,6 @@
           (echo "  - menhirLib:" %{lib-available:menhirLib} "\n")
           (echo "  - dune-site:" %{lib-available:dune-site} "\n")
           (echo "  - dune-site.plugins:" %{lib-available:dune-site.plugins} "\n")
-          (echo "  - ppx_import:" %{lib-available:ppx_import} "\n")
           (echo "  - ppx_deriving.eq:" %{lib-available:ppx_deriving.eq} "\n")
           (echo "  - ppx_deriving.ord:" %{lib-available:ppx_deriving.ord} "\n")
           (echo "  - ppx_deriving_yaml:" %{lib-available:ppx_deriving_yaml} "\n")
@@ -53,7 +52,7 @@
   (libraries frama-c.init fpath str unix zarith ocamlgraph dynlink bytes yaml.unix yojson menhirLib dune-site dune-site.plugins)
   (instrumentation (backend landmarks))
   (instrumentation (backend bisect_ppx))
-  (preprocess (staged_pps ppx_import ppx_deriving.eq ppx_deriving.ord ppx_deriving_yaml))
+  (preprocess (pps ppx_deriving.eq ppx_deriving.ord ppx_deriving_yaml))
 )
 
 (generate_sites_module (module config_data) (sites frama-c) (plugins (frama-c plugins) (frama-c plugins_gui)))
diff --git a/src/kernel_services/ast_data/cil_types.ml b/src/kernel_services/ast_data/cil_types.ml
index 9fb991e9eccd6b53dff7da97314be358c63f6f54..0b27f448cc4937d02c715c9f40ba63603e12ac99 100644
--- a/src/kernel_services/ast_data/cil_types.ml
+++ b/src/kernel_services/ast_data/cil_types.ml
@@ -54,6 +54,118 @@
 (* check_file class in frama-c/src/file.ml (before launching the tests)     *)
 (****************************************************************************)
 
+(* ************************************************************************* *)
+(** {2 Simple types} *)
+(* ************************************************************************* *)
+
+(* ************************************************************************* *)
+(** {3 Operators} *)
+(* ************************************************************************* *)
+
+(** Unary operators *)
+type unop =
+  | Neg   (** Unary minus *)
+  | BNot  (** Bitwise complement (~) *)
+  | LNot  (** Logical Not (!) *)
+[@@deriving eq]
+
+(** Binary operations *)
+type binop =
+    PlusA    (** arithmetic + *)
+  | PlusPI   (** pointer + integer *)
+  | MinusA   (** arithmetic - *)
+  | MinusPI  (** pointer - integer *)
+  | MinusPP  (** pointer - pointer *)
+  | Mult     (** * *)
+  | Div      (** /
+                 @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf> *)
+  | Mod      (** %
+                 @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf> *)
+  | Shiftlt  (** shift left *)
+  | Shiftrt  (** shift right *)
+
+  | Lt       (** <  (arithmetic comparison) *)
+  | Gt       (** >  (arithmetic comparison) *)
+  | Le       (** <= (arithmetic comparison) *)
+  | Ge       (** >= (arithmetic comparison) *)
+  | Eq       (** == (arithmetic comparison) *)
+  | Ne       (** != (arithmetic comparison) *)
+  | BAnd     (** bitwise and *)
+  | BXor     (** exclusive-or *)
+  | BOr      (** inclusive-or *)
+
+  | LAnd     (** logical and. Unlike other expressions this one does not always
+                 evaluate both operands. If you want
+                 to use these, you must set
+                 {!Cil.useLogicalOperators}. *)
+  | LOr      (** logical or. Unlike other expressions this one does not always
+                 evaluate both operands.  If you
+                 want to use these, you must set
+                 {!Cil.useLogicalOperators}. *)
+[@@deriving eq]
+
+(* ************************************************************************* *)
+(** {3 Types} *)
+(* ************************************************************************* *)
+
+(** Various kinds of integers *)
+type ikind =
+  | IBool       (** [_Bool] *)
+  | IChar       (** [char] *)
+  | ISChar      (** [signed char] *)
+  | IUChar      (** [unsigned char] *)
+  | IInt        (** [int] *)
+  | IUInt       (** [unsigned int] *)
+  | IShort      (** [short] *)
+  | IUShort     (** [unsigned short] *)
+  | ILong       (** [long] *)
+  | IULong      (** [unsigned long] *)
+  | ILongLong   (** [long long] (or [_int64] on Microsoft Visual C) *)
+  | IULongLong  (** [unsigned long long] (or [unsigned _int64] on MSVC) *)
+[@@deriving eq]
+
+(** Various kinds of floating-point numbers*)
+type fkind =
+  | FFloat      (** [float] *)
+  | FDouble     (** [double] *)
+  | FLongDouble (** [long double] *)
+[@@deriving eq]
+
+(* ************************************************************************* *)
+(** {3 Logic} *)
+(* ************************************************************************* *)
+
+type predicate_kind = Assert | Check | Admit
+[@@deriving eq]
+
+(** builtin logic labels defined in ACSL. *)
+type logic_builtin_label =
+  | Here
+  | Old
+  | Pre
+  | Post
+  | LoopEntry
+  | LoopCurrent
+  | Init
+[@@deriving eq]
+
+(** comparison relations*)
+type relation =
+  | Rlt
+  | Rgt
+  | Rle
+  | Rge
+  | Req
+  | Rneq
+  (** Different
+      @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf>
+  *)
+[@@deriving eq]
+
+(** kind of termination a post-condition applies to. See ACSL manual. *)
+type termination_kind = Normal | Exits | Breaks | Continues | Returns
+[@@deriving eq]
+
 (* ************************************************************************* *)
 (** {2 Root of the AST} *)
 (* ************************************************************************* *)
@@ -243,28 +355,6 @@ and typ =
   | TBuiltin_va_list of attributes
   (** This is the same as the gcc's type with the same name *)
 
-(** Various kinds of integers *)
-and ikind =
-    IBool       (** [_Bool] *)
-  | IChar       (** [char] *)
-  | ISChar      (** [signed char] *)
-  | IUChar      (** [unsigned char] *)
-  | IInt        (** [int] *)
-  | IUInt       (** [unsigned int] *)
-  | IShort      (** [short] *)
-  | IUShort     (** [unsigned short] *)
-  | ILong       (** [long] *)
-  | IULong      (** [unsigned long] *)
-  | ILongLong   (** [long long] (or [_int64] on Microsoft Visual C) *)
-  | IULongLong  (** [unsigned long long] (or [unsigned _int64] on Microsoft
-                    Visual C) *)
-
-(** Various kinds of floating-point numbers*)
-and fkind =
-    FFloat      (** [float] *)
-  | FDouble     (** [double] *)
-  | FLongDouble (** [long double] *)
-
 (* ************************************************************************* *)
 (** {2 Attributes} *)
 (* ************************************************************************* *)
@@ -742,46 +832,6 @@ and constant =
   (** An enumeration constant. Use [Cillower.lowerEnumVisitor] to replace these
       with integer constants. *)
 
-(** Unary operators *)
-and unop =
-    Neg   (** Unary minus *)
-  | BNot  (** Bitwise complement (~) *)
-  | LNot  (** Logical Not (!) *)
-
-(** Binary operations *)
-and binop =
-    PlusA    (** arithmetic + *)
-  | PlusPI   (** pointer + integer *)
-  | MinusA   (** arithmetic - *)
-  | MinusPI  (** pointer - integer *)
-  | MinusPP  (** pointer - pointer *)
-  | Mult     (** * *)
-  | Div      (** /
-                 @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf> *)
-  | Mod      (** %
-                 @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf> *)
-  | Shiftlt  (** shift left *)
-  | Shiftrt  (** shift right *)
-
-  | Lt       (** <  (arithmetic comparison) *)
-  | Gt       (** >  (arithmetic comparison) *)
-  | Le       (** <= (arithmetic comparison) *)
-  | Ge       (** >= (arithmetic comparison) *)
-  | Eq       (** == (arithmetic comparison) *)
-  | Ne       (** != (arithmetic comparison) *)
-  | BAnd     (** bitwise and *)
-  | BXor     (** exclusive-or *)
-  | BOr      (** inclusive-or *)
-
-  | LAnd     (** logical and. Unlike other expressions this one does not always
-                 evaluate both operands. If you want
-                 to use these, you must set
-                 {!Cil.useLogicalOperators}. *)
-  | LOr      (** logical or. Unlike other expressions this one does not always
-                 evaluate both operands.  If you
-                 want to use these, you must set
-                 {!Cil.useLogicalOperators}. *)
-
 (* ************************************************************************* *)
 (** {2 Left values} *)
 (* ************************************************************************* *)
@@ -1321,16 +1371,6 @@ and logic_label =
   | FormalLabel of string (** label of global annotation. *)
   | BuiltinLabel of logic_builtin_label
 
-(** builtin logic labels defined in ACSL. *)
-and logic_builtin_label =
-  | Here
-  | Old
-  | Pre
-  | Post
-  | LoopEntry
-  | LoopCurrent
-  | Init
-
 (* ************************************************************************* *)
 (** {2 Terms} *)
 (* ************************************************************************* *)
@@ -1523,19 +1563,6 @@ and logic_ctor_info =
 (** variables bound by a quantifier. *)
 and quantifiers = logic_var list
 
-(** comparison relations*)
-and relation =
-  | Rlt
-  | Rgt
-  | Rle
-  | Rge
-  | Req
-  | Rneq
-  (** Different
-      @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf>
-  *)
-
-
 (** predicates *)
 and predicate_node =
   | Pfalse (** always-false predicate. *)
@@ -1578,11 +1605,6 @@ and identified_predicate = {
   ip_content: toplevel_predicate; (** the predicate itself*)
 }
 
-and predicate_kind =
-  | Assert
-  | Check
-  | Admit
-
 (** main statement of an annotation. *)
 and toplevel_predicate = {
   tp_kind: predicate_kind;
@@ -1713,9 +1735,6 @@ and behavior = {
   (** extensions *)
 }
 
-(** kind of termination a post-condition applies to. See ACSL manual. *)
-and termination_kind = Normal | Exits | Breaks | Continues | Returns
-
 (** Pragmas for the value analysis plugin of Frama-C. *)
 and loop_pragma =
   | Unroll_specs of term list
diff --git a/src/kernel_services/ast_queries/ast_diff.ml b/src/kernel_services/ast_queries/ast_diff.ml
index 3b73ea2acc6ee7008575ff226599c2d6a29fb22e..58fe0aa05cd35e230ab82958356a766b3c2961f3 100644
--- a/src/kernel_services/ast_queries/ast_diff.ml
+++ b/src/kernel_services/ast_queries/ast_diff.ml
@@ -438,38 +438,6 @@ let is_matching_logic_type_var a a' env =
   | None -> false
   | Some a'' -> Datatype.String.equal a' a''
 
-module Unop = struct
-  type t = [%import: Cil_types.unop] [@@deriving eq]
-end
-
-module Binop = struct
-  type t = [%import: Cil_types.binop] [@@deriving eq]
-end
-
-module Ikind = struct
-  type t = [%import: Cil_types.ikind] [@@deriving eq]
-end
-
-module Fkind = struct
-  type t = [%import: Cil_types.fkind] [@@deriving eq]
-end
-
-module Predicate_kind = struct
-  type t = [%import: Cil_types.predicate_kind] [@@deriving eq]
-end
-
-module Logic_builtin_label = struct
-  type t = [%import: Cil_types.logic_builtin_label] [@@deriving eq]
-end
-
-module Relation = struct
-  type t = [%import: Cil_types.relation] [@@deriving eq]
-end
-
-module Termination_kind = struct
-  type t = [%import: Cil_types.termination_kind] [@@deriving eq]
-end
-
 let is_same_behavior_set l l' =
   Datatype.String.Set.(equal (of_list l) (of_list l'))
 
@@ -494,7 +462,7 @@ let is_same_logic_label l l' _env =
        Cil_datatype.Stmt.equal !s' s''
      | exception Not_found -> false)
   | FormalLabel s, FormalLabel s' -> Datatype.String.equal s s'
-  | BuiltinLabel l, BuiltinLabel l' -> Logic_builtin_label.equal l l'
+  | BuiltinLabel l, BuiltinLabel l' -> equal_logic_builtin_label l l'
   | (StmtLabel _ | FormalLabel _ | BuiltinLabel _), _ -> false
 
 let rec is_same_predicate p p' env =
@@ -511,7 +479,7 @@ and is_same_predicate_node p p' env =
     is_same_list is_same_term args args' env
   | Pseparated t, Pseparated t' -> is_same_list is_same_term t t' env
   | Prel (r,t1,t2), Prel(r',t1',t2') ->
-    Relation.equal r r' && is_same_term t1 t1' env && is_same_term t2 t2' env
+    equal_relation r r' && is_same_term t1 t1' env && is_same_term t2 t2' env
   | Pand(p1,p2), Pand(p1',p2')
   | Por(p1,p2), Por(p1',p2')
   | Pxor(p1,p2), Pxor(p1',p2')
@@ -579,9 +547,9 @@ and is_same_term_node t t' env =
   | TSizeOfE t, TSizeOfE t'
   | TAlignOfE t, TAlignOfE t' -> is_same_term t t' env
   | TSizeOfStr s, TSizeOfStr s' -> String.length s = String.length s'
-  | TUnOp(op,t), TUnOp(op',t') -> Unop.equal op op' && is_same_term t t' env
+  | TUnOp(op,t), TUnOp(op',t') -> equal_unop op op' && is_same_term t t' env
   | TBinOp(op,t1,t2), TBinOp(op',t1',t2') ->
-    Binop.equal op op' && is_same_term t1 t1' env && is_same_term t2 t2' env
+    equal_binop op op' && is_same_term t1 t1' env && is_same_term t2 t2' env
   | TCast(is_logic, typ, term), TCast(is_logic', typ', term') ->
     is_logic = is_logic' && is_same_logic_type typ typ' env && is_same_term term term' env
   | TAddrOf lv, TAddrOf lv'
@@ -685,7 +653,7 @@ and is_same_term_offset lo lo' env =
   | (TNoOffset | TField _ | TModel _ | TIndex _), _ -> false
 
 and is_same_toplevel_predicate p p' env =
-  Predicate_kind.equal p.tp_kind p'.tp_kind &&
+  equal_predicate_kind p.tp_kind p'.tp_kind &&
   is_same_predicate p.tp_statement p'.tp_statement env
 
 and is_same_identified_predicate p p' env =
@@ -695,7 +663,7 @@ and is_same_identified_term t t' env =
   is_same_term t.it_content t'.it_content env
 
 and is_same_post_cond (k,p) (k',p') env =
-  Termination_kind.equal k k' && is_same_identified_predicate p p' env
+  equal_termination_kind k k' && is_same_identified_predicate p p' env
 
 and is_same_deps d d' env =
   match d,d' with
@@ -877,9 +845,9 @@ and is_same_type t t' env =
   match t, t' with
   | TVoid a, TVoid a' -> Cil_datatype.Attributes.equal a a'
   | TInt (ik,a), TInt(ik',a') ->
-    Ikind.equal ik ik' && Cil_datatype.Attributes.equal a a'
+    equal_ikind ik ik' && Cil_datatype.Attributes.equal a a'
   | TFloat (fk,a), TFloat(fk', a') ->
-    Fkind.equal fk fk' && Cil_datatype.Attributes.equal a a'
+    equal_fkind fk fk' && Cil_datatype.Attributes.equal a a'
   | TBuiltin_va_list a, TBuiltin_va_list a' ->
     Cil_datatype.Attributes.equal a a'
   | TPtr(t,a), TPtr(t',a') ->
@@ -922,7 +890,7 @@ and is_same_compinfo ci ci' env =
 and is_same_enuminfo ei ei' env =
   let res, _ =
     (Cil_datatype.Attributes.equal ei.eattr ei'.eattr &&
-     Ikind.equal ei.ekind ei'.ekind, env) &&&
+     equal_ikind ei.ekind ei'.ekind, env) &&&
     is_same_list_env is_same_enumitem ei.eitems ei'.eitems
   in
   res
@@ -994,9 +962,9 @@ and is_same_exp e e' env =
   | AlignOf t, AlignOf t' -> is_same_type t t' env
   | AlignOfE e, AlignOfE e' -> is_same_exp e e' env
   | UnOp(op,e,t), UnOp(op',e',t') ->
-    Unop.equal op op' && is_same_exp e e' env && is_same_type t t' env
+    equal_unop op op' && is_same_exp e e' env && is_same_type t t' env
   | BinOp(op,e1,e2,t), BinOp(op',e1',e2',t') ->
-    Binop.equal op op' && is_same_exp e1 e1' env && is_same_exp e2 e2' env
+    equal_binop op op' && is_same_exp e1 e1' env && is_same_exp e2 e2' env
     && is_same_type t t' env
   | CastE(t,e), CastE(t',e') -> is_same_type t t' env && is_same_exp e e' env
   | AddrOf lv, AddrOf lv' -> is_same_lval lv lv' env
diff --git a/src/plugins/eva/dune b/src/plugins/eva/dune
index ee102c636e8dba81c0523c333d5ca81ca3984577..71e32bff86870737e824723a07bf73d9859024ec 100644
--- a/src/plugins/eva/dune
+++ b/src/plugins/eva/dune
@@ -45,7 +45,7 @@
  (libraries frama-c.kernel frama-c-server.core frama-c-postdominators.core)
  (instrumentation (backend landmarks))
  (instrumentation (backend bisect_ppx))
- (preprocess (staged_pps ppx_deriving.eq ppx_deriving.ord)))
+ (preprocess (pps ppx_deriving.eq ppx_deriving.ord)))
 
 (plugin
  (name eva)