diff --git a/src/plugins/e-acsl/env.ml b/src/plugins/e-acsl/env.ml
index aeb9cc143e247a31d4abaf5747dd76a4e2ce4708..b72499902a3414a1bd8ce1c25ec45593b9c71fa8 100644
--- a/src/plugins/e-acsl/env.ml
+++ b/src/plugins/e-acsl/env.ml
@@ -60,7 +60,6 @@ type t =
          should be added. *)
       global_mpz_tbl: mpz_tbl;
       env_stack: local_env list;
-      init_env: local_env;
       var_mapping: Varinfo.t Stack.t Logic_var.Map.t;
       (* records of C bindings for logic vars *)
       loop_invariants: predicate list list;
@@ -118,7 +117,6 @@ let dummy =
     new_global_vars = [];
     global_mpz_tbl = empty_mpz_tbl; 
     env_stack = []; 
-    init_env = empty_local_env;
     var_mapping = Logic_var.Map.empty;
     loop_invariants = [];
     cpt = 0; }
@@ -131,18 +129,16 @@ let empty v =
     new_global_vars = [];
     global_mpz_tbl = empty_mpz_tbl; 
     env_stack = []; 
-    init_env = empty_local_env;
     var_mapping = Logic_var.Map.empty;
     loop_invariants = [];
     cpt = 0 }
 
 
-let top init env = 
-  if init then env.init_env, []
-  else match env.env_stack with [] -> assert false | hd :: tl -> hd, tl
+let top env =
+  match env.env_stack with [] -> assert false | hd :: tl -> hd, tl
 
 let has_no_new_stmt env =
-  let local, _ = top false env in
+  let local, _ = top env in
   local.block_info = empty_block
 
 (* ************************************************************************** *)
@@ -165,11 +161,11 @@ let pop_loop env = match env.loop_invariants with
 (* ************************************************************************** *)
 
 let rte env b =
-  let local_env, tl_env = top false env in
+  let local_env, tl_env = top env in
   { env with env_stack = { local_env with rte = b } :: tl_env }
 
 let generate_rte env =
-  let local_env, _ = top false env in
+  let local_env, _ = top env in
   local_env.rte
 
 (* ************************************************************************** *)
@@ -177,8 +173,8 @@ let generate_rte env =
 (* eta-expansion required for typing generalisation *)
 let acc_list_rev acc l = List.fold_left (fun acc x -> x :: acc) acc l
 
-let do_new_var ~loc init ?(scope=Local_block) ?(name="") env t ty mk_stmts =
-  let local_env, tl_env = top init env in
+let do_new_var ~loc ?(scope=Local_block) ?(name="") env t ty mk_stmts =
+  let local_env, tl_env = top env in
   let local_block = local_env.block_info in
   let is_t = Gmpz.is_t ty in
   if is_t then Gmpz.is_now_referenced ();
@@ -210,7 +206,6 @@ let do_new_var ~loc init ?(scope=Local_block) ?(name="") env t ty mk_stmts =
   v,
   e, 
   if is_t then begin
-    assert (not init); (* only char* in initializers *)
     let extend_tbl tbl = 
 (*      Options.feedback "memoizing %a for term %a" 
 	Varinfo.pretty v (fun fmt t -> match t with None -> Format.fprintf fmt
@@ -249,33 +244,36 @@ let do_new_var ~loc init ?(scope=Local_block) ?(name="") env t ty mk_stmts =
     { env with
       new_global_vars = new_global_vars;
       cpt = n;
-      init_env = if init then local_env else env.init_env;
-      env_stack = if init then env.env_stack else local_env :: tl_env }
+      env_stack = local_env :: tl_env }
 
 exception No_term
 
-let new_var ~loc ?(init=false) ?(scope=Local_block) ?name env t ty mk_stmts =
-  let local_env, _ = top init env in
+let new_var ~loc ?(scope=Local_block) ?name env t ty mk_stmts =
+  let local_env, _ = top env in
   let memo tbl =
     try
       match t with
       | None -> raise No_term
-      | Some t -> 
-	let v, e = Term.Map.find t tbl.new_exps in
-	if Typ.equal ty v.vtype then v, e, env else raise No_term
-    with Not_found | No_term -> 
-      do_new_var ~loc ~scope init ?name env t ty mk_stmts  
+      | Some t ->
+        let v, e = Term.Map.find t tbl.new_exps in
+        if Typ.equal ty v.vtype then v, e, env else raise No_term
+    with Not_found | No_term ->
+      do_new_var ~loc ~scope ?name env t ty mk_stmts
   in
   match scope with
   | Global | Function ->
-    assert (not init);
     memo env.global_mpz_tbl
   | Local_block ->
     memo local_env.mpz_tbl
 
-let new_var_and_mpz_init ~loc ?init ?scope ?name env t mk_stmts =
-  new_var 
-    ~loc ?init ?scope ?name env t (Gmpz.t ()) 
+let new_var_and_mpz_init ~loc ?scope ?name env t mk_stmts =
+  new_var
+    ~loc
+    ?scope
+    ?name
+    env
+    t
+    (Gmpz.t ())
     (fun v e -> Gmpz.init ~loc e :: mk_stmts v e)
 
 module Logic_binding = struct
@@ -365,10 +363,10 @@ let add_assert env stmt annot = match current_kf env with
       (fun () -> Annotations.add_assert emitter ~kf stmt annot) 
       env.visitor#get_filling_actions
 
-let add_stmt ?(post=false) ?(init=false) ?before env stmt =
+let add_stmt ?(post=false) ?before env stmt =
   if not post then
     Extlib.may (fun old -> E_acsl_label.move env.visitor ~old stmt) before;
-  let local_env, tl = top init env in
+  let local_env, tl = top env in
   let block = local_env.block_info in
   let block =
     if post then
@@ -377,9 +375,7 @@ let add_stmt ?(post=false) ?(init=false) ?before env stmt =
       { block with new_stmts = stmt :: block.new_stmts }
   in
   let local_env = { local_env with block_info = block } in
-  { env with
-    init_env = if init then local_env else env.init_env;
-    env_stack = if init then env.env_stack else local_env :: tl }
+  { env with env_stack = local_env :: tl }
 
 let extend_stmt_in_place env stmt ~label block =
   let new_stmt = Cil.mkStmt ~valid_sid:true (Block block) in
@@ -392,7 +388,7 @@ let extend_stmt_in_place env stmt ~label block =
     | FormalLabel _ | StmtLabel _ -> false
     in
     if pre then
-    let local_env, tl_env = top false env in
+    let local_env, tl_env = top env in
     let b_info = local_env.block_info in
     let b_info = { b_info with pre_stmts = new_stmt :: b_info.pre_stmts } in
     { env with env_stack = { local_env with block_info = b_info } :: tl_env }
@@ -405,7 +401,7 @@ let push env =
 
 let pop env =
 (*  Options.feedback "pop";*)
-  let _, tl = top false env in
+  let _, tl = top env in
   { env with env_stack = tl }
 
 let transfer ~from env = match from.env_stack, env.env_stack with
@@ -425,7 +421,7 @@ type where = Before | Middle | After
 let pop_and_get ?(split=false) env stmt ~global_clear where =
   let split = split && stmt.labels = [] in
 (*  Options.feedback "pop_and_get from %a (%b)" Printer.pp_stmt stmt split;*)
-  let local_env, tl = top false env in
+  let local_env, tl = top env in
   let clear =
     if global_clear then begin
       Varname.clear ();
@@ -525,7 +521,7 @@ end
 
 (* debugging purpose *)
 let pretty fmt env =
-  let local_env, _ = top false env in
+  let local_env, _ = top env in
   Format.fprintf fmt "local new_stmts %t"
     (fun fmt -> 
       List.iter
diff --git a/src/plugins/e-acsl/env.mli b/src/plugins/e-acsl/env.mli
index b56fe807cd817458a57e3b58a3004f0d89bb42dc..429e4937ed1ce7cc10ea772541f2fc2b31b706c7 100644
--- a/src/plugins/e-acsl/env.mli
+++ b/src/plugins/e-acsl/env.mli
@@ -46,18 +46,18 @@ module Varname: sig
 end
 
 val new_var:
-  loc:location -> ?init:bool -> ?scope:scope -> ?name:string ->
+  loc:location -> ?scope:scope -> ?name:string ->
   t -> term option -> typ -> 
   (varinfo -> exp (* the var as exp *) -> stmt list) -> 
   varinfo * exp * t
 (** [new_var env t ty mk_stmts] extends [env] with a fresh variable of type
     [ty] corresponding to [t]. [scope] is the scope of the new variable (default
-    is [Block]). [init] indicates if the initial env must be used.
+    is [Block]).
     @return this variable as both a C variable and a C expression already
     initialized by applying it to [mk_stmts]. *)
 
 val new_var_and_mpz_init:
-  loc:location -> ?init:bool -> ?scope:scope -> ?name:string -> 
+  loc:location -> ?scope:scope -> ?name:string ->
   t -> term option -> 
   (varinfo -> exp (* the var as exp *) -> stmt list) -> 
   varinfo * exp * t
@@ -79,7 +79,7 @@ val add_assert: t -> stmt -> predicate -> unit
 (** [add_assert env s p] associates the assertion [p] to the statement [s] in
     the environment [env]. *)
 
-val add_stmt: ?post:bool -> ?init:bool -> ?before:stmt -> t -> stmt -> t
+val add_stmt: ?post:bool -> ?before:stmt -> t -> stmt -> t
 (** [add_stmt env s] extends [env] with the new statement [s].
     [before] may define which stmt the new one is included before. This is to
     say that any labels attached to [before] are moved to [stmt]. [post]