diff --git a/nix/default.nix b/nix/default.nix
index 9484f9c80ec3b0078666a1e745f4039691a3e370..1364faadb7543b9976740cd5a03ea9718b2da4da 100644
--- a/nix/default.nix
+++ b/nix/default.nix
@@ -2,18 +2,18 @@
 { pkgs, stdenv, src ? ../., opam2nix, ocaml ? "ocaml-ng.ocamlPackages_4_08.ocaml", plugins ? { } }:
 
 let mydir = builtins.getEnv("PWD");
-    opam-selection = {
+    mk-opam-selection = name: {
       inherit ocaml;
-      selection = "${mydir}/opam-selection.nix";
+      selection = "${mydir}/${name}-${ocaml.version}-opam-selection.nix";
     };
-    mk_opam_derivations = packages: opam2nix.resolve opam-selection packages;
     opamPackages =
       [ "ocamlfind" "zarith" "ocamlgraph" "yojson" "zmq"
         "ppx_deriving" "ppx_deriving_yojson"
         "coq=8.12.0" "alt-ergo=2.2.0" "why3=1.4.0" "why3-coq=1.4.0" ];
 
+    # only pure nix packages. See mk_deriv below for adding opam2nix packages
     mk_buildInputs = { nixPackages ? [] } :
-    [ pkgs.gnugrep pkgs.gnused  pkgs.autoconf pkgs.gnumake pkgs.gcc pkgs.ncurses pkgs.time pkgs.python3 pkgs.perl pkgs.file pkgs.which pkgs.dos2unix] ++ nixPackages ++ opam2nix.buildInputs opam-selection;
+    [ pkgs.gnugrep pkgs.gnused  pkgs.autoconf pkgs.gnumake pkgs.gcc pkgs.ncurses pkgs.time pkgs.python3 pkgs.perl pkgs.file pkgs.which pkgs.dos2unix] ++ nixPackages;
     # Extends the call to stdenv.mkDerivation with parameters common for all
     # frama-c derivations
     mk_deriv = args:
@@ -22,20 +22,25 @@ let mydir = builtins.getEnv("PWD");
               opamPackages ++ args.opamPackages
             else opamPackages
           ;
+          opam-selection = mk-opam-selection args.name;
+          buildInputs = args.buildInputs ++ opam2nix.buildInputs opam-selection;
       in
-        stdenv.mkDerivation ({
+        stdenv.mkDerivation (
+          args //
+          {
             # Disable Nix's GCC hardening
             hardeningDisable = [ "all" ];
-        } // args)
+            inherit buildInputs;
+          })
         //
-        { gen-opam-selection = mk_opam_derivations my_opam_packages; }
+        { gen-opam-selection =
+            opam2nix.resolve opam-selection my_opam_packages; }
     ;
 in
 
 pkgs.lib.makeExtensible
 (self: {
-  inherit src mk_buildInputs mk_opam_derivations opamPackages mk_deriv;
-  gen-opam-selection = self.mk_opam_derivations self.opamPackages;
+  inherit src mk_buildInputs opamPackages mk_deriv;
   buildInputs = mk_buildInputs {};
   installed = self.main.out;
   main = mk_deriv {
diff --git a/nix/frama-ci.nix b/nix/frama-ci.nix
index c2ddb4a5610233f260bd555b732f09661f104d77..c26b5fa8d42ac00667c4f2e36e2c909b15b077dd 100644
--- a/nix/frama-ci.nix
+++ b/nix/frama-ci.nix
@@ -5,7 +5,7 @@ let
     src = builtins.fetchGit {
             "url" = "https://bobot:${password}@git.frama-c.com/frama-c/Frama-CI.git";
             "name" = "Frama-CI";
-            "rev" = "0f3e686bcec6f8aa9a4d3da797759a1052513ca3";
+            "rev" = "28e429a18df17f911cdbc2ad757e2b549e629d0d";
             "ref" = "feature/upgrade-opam2nix";
     };
  in