diff --git a/convert.ml b/convert.ml
index 7aa2981ebaabe65be1ecf6227001017fa0aa6a03..2e2e262525f62c023c894fe6cb9c79937dab29df 100644
--- a/convert.ml
+++ b/convert.ml
@@ -526,7 +526,7 @@ let mk_compound_init env lv typ init =
         { expr_loc = def.expr_loc; expr_node = BINARY(ASSIGN,lv,def)},
         def.expr_loc)
       :: acc
-    | NO_INIT -> NOP loc :: acc
+    | NO_INIT -> NOP (None, loc) :: acc
     | COMPOUND_INIT l ->
       (match typ.plain_type with
        | Array { subtype } ->
@@ -571,7 +571,7 @@ let mk_compound_init env lv typ init =
 
 let computation_or_nop loc exp =
   match exp.expr_node with
-  | NOTHING -> NOP loc
+  | NOTHING -> NOP (None, loc)
   | _ -> COMPUTATION(exp,loc)
 
 let preserved_returned_object aux e =
@@ -2250,7 +2250,7 @@ and convert_statement env st does_remove_virtual =
   let<> UpdatedCurrentLoc = cloc in
   let raw, env =
     match st with
-    | Nop _ -> NOP (cloc), env
+    | Nop _ -> NOP (None, cloc), env
     | Code_annot (_,annot) ->
       let env, c_annot = Convert_acsl.convert_code_annot env annot in
       CODE_ANNOT(c_annot,cloc), env
@@ -2270,7 +2270,7 @@ and convert_statement env st does_remove_virtual =
       in
       add_temps aux (COMPUTATION(e,cloc)), env
     | VirtualExpression (_,e) ->
-      if does_remove_virtual then NOP cloc, env
+      if does_remove_virtual then NOP (None, cloc), env
       else
         let env, aux, e = convert_full_expr env e does_remove_virtual in
         add_temps aux (COMPUTATION(e,cloc)), env
@@ -2293,7 +2293,7 @@ and convert_statement env st does_remove_virtual =
       in
       add_temps aux (IF(cond,true_action,false_action,cloc)), env
     | Label(_,lab) ->
-      let stmt = make_stmt env (NOP (cloc)) in
+      let stmt = make_stmt env (NOP (None, cloc)) in
       LABEL(lab,stmt,cloc), env
     | Goto(_,lab) ->
       GOTO(lab,cloc), env
@@ -2468,7 +2468,7 @@ and convert_stmt_block env b does_remove_virtual =
   let stmts, env = convert_stmt_list env b does_remove_virtual in
   let stmt =
     match stmts with
-      [] -> make_stmt env (NOP cloc)
+      [] -> make_stmt env (NOP (None, cloc))
     | [ a ] -> a
     | l -> make_block_stmt env l
   in
@@ -3146,7 +3146,7 @@ and create_assign_stmt_type op env typ dst src =
     stmt, defs, Convert_env.unscope lenv env
   | Array { dimension = None} ->
     (* GNU extension. Treat it as a an empty field. *)
-    make_stmt env (NOP loc), [], env
+    make_stmt env (NOP (None, loc)), [], env
   | Union (s,t) ->
     (* TODO: check whether the union has a user-provided copy constructor.
        Otherwise, the implicit default is to copy the object representation
@@ -3169,7 +3169,7 @@ and create_assign_stmt_type op env typ dst src =
       (* No initialization is performed by default constructor, cf 12.6.2§8.
          No destructor call for variant members, cf 12.4§7.
       *)
-      make_stmt env (NOP loc), [], env
+      make_stmt env (NOP (None, loc)), [], env
   | Struct (s,t) ->
     let class_name = Convert_env.typedef_normalize env s t in
     implicit_op_call op env true class_name dst src
@@ -3203,7 +3203,7 @@ let create_default_constructor env most_derived class_name =
   let class_field dst _ = [ dst ] in
   (* TODO: add in intermediate_format.ast information about initializer
      of corresponding fields. See 12.6.2§8 *)
-  let plain_field _ _ = make_stmt env (NOP loc) in
+  let plain_field _ _ = make_stmt env (NOP (None, loc)) in
   let kind most_derived = FKConstructor most_derived in
   let name _ (qname, tkind) =
     Cxx_utils.meth_name qname tkind qname.decl_name
@@ -3385,7 +3385,7 @@ let create_destructor env most_derived class_name =
     else None
   in
   let class_field dst _ = [ dst ] in
-  let plain_field _ _ = make_stmt env (NOP loc) in
+  let plain_field _ _ = make_stmt env (NOP (None, loc)) in
   let kind most_derived = FKDestructor most_derived in
   let return () =
     make_stmt env (RETURN ({ expr_loc = loc; expr_node = NOTHING}, loc))
diff --git a/doc/userman/FCLANG_VERSION b/doc/userman/FCLANG_VERSION
index a9c195da9514ee9593eed998682bd7c2d0d51706..efd25b2b56c74c4bb7b31f237b3e0d967bb9c05b 100644
--- a/doc/userman/FCLANG_VERSION
+++ b/doc/userman/FCLANG_VERSION
@@ -1 +1 @@
-0.0.16+dev
+0.0.17~beta
diff --git a/doc/userman/FC_VERSION b/doc/userman/FC_VERSION
index 6630b191eeab90f86c2ff9d96fcf0f432831e44e..e5b91ee00b743d168313a0cfb2e41ad0d3a42883 100644
--- a/doc/userman/FC_VERSION
+++ b/doc/userman/FC_VERSION
@@ -1 +1 @@
-29.0+dev
+30.0~beta
diff --git a/doc/userman/FC_VERSION_NAME b/doc/userman/FC_VERSION_NAME
index 6ef0d73b2e61dce4f0efb74239694c393c8113d0..435882f7ccab4ea4bc783d64850823f4182faa80 100644
--- a/doc/userman/FC_VERSION_NAME
+++ b/doc/userman/FC_VERSION_NAME
@@ -1 +1 @@
-Copper
+Zinc
diff --git a/dune-project b/dune-project
index c043c5c81087764d9a2307249bcedc131a6262af..9a763ce1eb4477f22a57a106fd46feba50f2bcda 100644
--- a/dune-project
+++ b/dune-project
@@ -30,7 +30,7 @@
 (package (name frama-clang)
  (depends
   ("dune" (<> 3.13.0)) ; performance problem
-  ("frama-c" (and (>= 29.0~) (< 30.0~)))
+  ("frama-c" (and (>= 30.0~) (< 31.0~)))
   ("zarith" (>= 1.5))
   "camlp5"
   "camlp-streams"
diff --git a/frama-clang.opam b/frama-clang.opam
index 6a03c4908d8fb150b45a45a9d7b465a3f78d097c..a8fa5d9f55958d706d15931f66ceeda329bbf87d 100644
--- a/frama-clang.opam
+++ b/frama-clang.opam
@@ -30,7 +30,7 @@ build: [
   ["dune" "install" "-p" name "--create-install-files" name]
 ]
 name: "frama-clang"
-version: "0.0.16+dev"
+version: "0.0.17~beta"
 synopsis: "Frama-C plug-in based on Clang for parsing C++ files"
 description: """
 This Frama-C plug-in parse C++ files that may contain ACSL++ annotations.
diff --git a/frama-clang.opam.template b/frama-clang.opam.template
index ae437f61c2dfd27b09305631ac67bad31b23fa34..1e9dbc7800e4337208a4f1cb2530787b96bec73f 100644
--- a/frama-clang.opam.template
+++ b/frama-clang.opam.template
@@ -1,5 +1,5 @@
 name: "frama-clang"
-version: "0.0.16+dev"
+version: "0.0.17~beta"
 synopsis: "Frama-C plug-in based on Clang for parsing C++ files"
 description: """
 This Frama-C plug-in parse C++ files that may contain ACSL++ annotations.
diff --git a/nix/frama-clang-manual.nix b/nix/frama-clang-manual.nix
index c40704f2f67eca15c7e84a72f69d4277f2b82e78..30b6b5633b7ff49330ee24bb5a2635fb178056eb 100644
--- a/nix/frama-clang-manual.nix
+++ b/nix/frama-clang-manual.nix
@@ -7,7 +7,7 @@
 
 stdenv.mkDerivation rec {
   pname = "manual";
-  version = frama-clang.version;
+  version = lib.strings.replaceStrings ["~"] ["-"] frama-clang.version;
 
   build_dir = frama-c.build_dir + "/dir.tar";
   srcs =
diff --git a/nix/frama-clang.nix b/nix/frama-clang.nix
index 37cb3a697d40490c3f8a856992544be151c20245..b739953ddd392ef887850b557f3eaf39043424bc 100644
--- a/nix/frama-clang.nix
+++ b/nix/frama-clang.nix
@@ -25,12 +25,11 @@ mk_plugin {
   dontUseCmakeConfigure=true;
   # set frama-clang's version number
   version =
-    lib.strings.replaceStrings ["~"] ["-"]
-      (lib.strings.removePrefix "version: \""
-        (lib.strings.removeSuffix "\""
-          (lib.lists.findFirst
-            (x: lib.strings.hasPrefix "version:" x)
-            ""
-            (lib.strings.splitString "\n"
-              (builtins.readFile ../frama-clang.opam.template)))));
+    lib.strings.removePrefix "version: \""
+      (lib.strings.removeSuffix "\""
+        (lib.lists.findFirst
+          (x: lib.strings.hasPrefix "version:" x)
+          ""
+          (lib.strings.splitString "\n"
+            (builtins.readFile ../frama-clang.opam.template))));
 }