diff --git a/dev/set-version.sh b/dev/set-version.sh
new file mode 100755
index 0000000000000000000000000000000000000000..488cb678b5fc0cde4ac1a10518258a606f17027c
--- /dev/null
+++ b/dev/set-version.sh
@@ -0,0 +1,96 @@
+#! /bin/bash
+##########################################################################
+#                                                                        #
+#  This file is part of Frama-C.                                         #
+#                                                                        #
+#  Copyright (C) 2007-2023                                               #
+#    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).            #
+#                                                                        #
+##########################################################################
+
+NEXT=$1
+
+if ! test -f VERSION; then
+  echo "This script must be run from Frama-C root directory"
+  exit 2
+fi
+if test -z "$NEXT"; then
+  echo "Missing argument. Usage is:"
+  echo "\$ ./dev/set-version.sh <NN.M>"
+  echo "See the Release Management Documentation for an example."
+  exit 2
+fi
+
+NEXT_MAJOR=$(echo "$NEXT" | sed -e s/\\\([0-9]*\\\).[0-9]*.*/\\1/)
+NEXT_MINOR=$(echo "$NEXT" | sed -e s/[0-9]*.\\\([0-9]*\\\).*/\\1/)
+NEXT_CODENAME=$(grep "$NEXT_MAJOR " ./doc/release/periodic-elements.txt | cut -d " " -f2)
+
+CURRENT=$(cat VERSION)
+CURRENT_MAJOR=$(echo "$CURRENT" | sed -e s/\\\([0-9]*\\\).[0-9]*.*/\\1/)
+CURRENT_MINOR=$(echo "$CURRENT" | sed -e s/[0-9]*.\\\([0-9]*\\\).*/\\1/)
+CURRENT_CODENAME=$(grep "$CURRENT_MAJOR " ./doc/release/periodic-elements.txt | cut -d " " -f2)
+
+echo "NEXT VERSION is:"
+echo "- MAJOR:    $NEXT_MAJOR"
+echo "- MINOR:    $NEXT_MINOR"
+echo "- CODENAME: $NEXT_CODENAME"
+
+echo ""
+echo "Continue? [y/N] "
+read CHOICE
+case "${CHOICE}" in
+  "Y"|"y") ;;
+  *) exit 1 ;;
+esac
+
+# Version
+
+echo "$NEXT" > VERSION
+echo "$NEXT_CODENAME" > VERSION_CODENAME
+
+# Opam file
+sed -i "s/^version: .*/version: \"$NEXT_MAJOR.$NEXT_MINOR\"/g" opam
+sed -i "s/\(.*\)$CURRENT_MAJOR.$CURRENT_MINOR-$CURRENT_CODENAME\(.*\)/\1$NEXT_MAJOR.$NEXT_MINOR-$NEXT_CODENAME\2/g" opam
+
+# Changelogs
+
+FC_CL_MSG_FUTURE="Open Source Release <next-release>"
+FC_CL_MSG_NEXT="Open Source Release $NEXT_MAJOR.$NEXT_MINOR ($NEXT_CODENAME)"
+FC_CL_LIN="###############################################################################"
+
+sed -i -z "s/\($FC_CL_LIN\n$FC_CL_MSG_FUTURE\n\)/\1$FC_CL_LIN\n\n$FC_CL_LIN\n$FC_CL_MSG_NEXT\n/g" Changelog
+
+EA_CL_MSG_FUTURE="Plugin E-ACSL <next-release>"
+EA_CL_MSG_NEXT="Plugin E-ACSL $NEXT_MAJOR.$NEXT_MINOR ($NEXT_CODENAME)"
+
+sed -i -z "s/\($FC_CL_LIN\n$EA_CL_MSG_FUTURE\n\)/\1$FC_CL_LIN\n\n$FC_CL_LIN\n$EA_CL_MSG_NEXT\n/g" src/plugins/e-acsl/doc/Changelog
+
+WP_CL_MSG_FUTURE="Plugin WP <next-release>"
+WP_CL_MSG_NEXT="Plugin WP $NEXT_MAJOR.$NEXT_MINOR ($NEXT_CODENAME)"
+
+sed -i -z "s/\($FC_CL_LIN\n$WP_CL_MSG_FUTURE\n\)/\1$FC_CL_LIN\n\n$FC_CL_LIN\n$WP_CL_MSG_NEXT\n/g" src/plugins/wp/Changelog
+
+# API doc
+find src -name '*.ml*' -exec sed -i -e "s/Frama-C+dev/${NEXT}-${NEXT_CODENAME}/gI" '{}' ';'
+
+# Manuals changes
+sed -i "s/\(^\\\\section\*{Frama-C+dev}\)/%\1\n\n\\\\section\*{$NEXT_MAJOR.$NEXT_MINOR ($NEXT_CODENAME)}/g" \
+  doc/userman/user-changes.tex
+sed -i "s/\(^\\\\section\*{Frama-C+dev}\)/%\1\n\n\\\\section\*{$NEXT_MAJOR.$NEXT_MINOR ($NEXT_CODENAME)}/g" \
+  doc/developer/changes.tex
+
+sed -i "s/\(^\\\\section\*{E-ACSL \\\\eacslpluginversion \\\\eacslplugincodename}\)/%\1\n\n\\\\section\*{E-ACSL $NEXT_MAJOR.$NEXT_MINOR $NEXT_CODENAME}/g" \
+  src/plugins/e-acsl/doc/userman/changes.tex
diff --git a/dev/update_api_doc.sh b/dev/update_api_doc.sh
deleted file mode 100755
index 879e0d50410e98b64cf220c67bef3c2ef0567ee3..0000000000000000000000000000000000000000
--- a/dev/update_api_doc.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-##########################################################################
-#                                                                        #
-#  This file is part of Frama-C.                                         #
-#                                                                        #
-#  Copyright (C) 2007-2023                                               #
-#    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).            #
-#                                                                        #
-##########################################################################
-
-next=$1
-
-if test -z "$next"; then
-  echo "Missing argument. Usage is:"
-  echo "\$ ./bin/update_api_doc.sh <NEXT>"
-  echo "See the Release Management Documentation for an example."
-else
-  find src -name '*.ml*' -exec sed -i -e "s/Frama-C+dev/${next}/gI" '{}' ';'
-fi