diff --git a/lib/sasacore/worstInit.ml b/lib/sasacore/worstInit.ml
index b8c07bd539f1d334d7193df889969e9d07a55b4f..9021b74aec19b01bba3c3dc8e43bbcb64611c2d0 100644
--- a/lib/sasacore/worstInit.ml
+++ b/lib/sasacore/worstInit.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 06/04/2022 (at 15:39) by Erwan Jahier> *)
+(* Time-stamp: <modified the 14/04/2022 (at 17:20) by Erwan Jahier> *)
 
 open Register
 
@@ -10,32 +10,46 @@ let debug = false
 type distance = Far | Close
 let mutate_value distance = function
   | F (minf,f,maxf) ->
-    let deltaf = match distance with
-      | Far -> (maxf-.minf) 
-      | Close -> (maxf-.minf) /. 100.
-    in
-    let nf =
-      if minf > f -. deltaf then
-        minf+.(Random.float (2.0 *. deltaf))
-    else if maxf < f +. deltaf then
-      maxf -. (Random.float (2.0 *. deltaf))
-    else
-      f+.(Random.float (2.0 *. deltaf)) -. deltaf
+    let nf = match distance with
+      | Far -> Random.float (maxf-.minf) +. minf
+      | Close ->
+        let delta = Random.float (maxf-.minf)/.100. -. (maxf-.minf)/.200. in
+        if f+.delta<minf || f+.delta>maxf then f-.delta else f+.delta
     in
     F(minf, nf, maxf)
 
   | I (mini,i,maxi) ->
-    let deltai = match distance with
-      | Far -> (maxi - mini) / 2
-      | Close -> ((maxi - mini) / 100)
-    in
-    let deltai = 1+Random.int (max 1 deltai) in
-    let ni = if i=mini then i+deltai else if i=maxi then i-deltai else
-      if Random.bool () then i+deltai else i-deltai
+    assert (mini<maxi);
+    let ni = match distance with
+      | Far ->
+        let ni = Random.int(maxi-mini) + mini in
+        if ni = i then maxi else ni
+      | Close ->
+        if i=mini then i+1 else if i=maxi then i-1 else
+        if Random.bool () then i+1 else i-1
     in
     I (mini,ni,maxi)
-  |  B b -> B (not b)
-                                
+  | B b -> B (not b)
+(*
+in order to test the distribution of the mutants
+
+   let a = Array.make 10 0 in
+   let p = ref (I (3, 4, 6)) in
+   for i=1 to 100000 do
+       p:=mutate_value Far !p;
+       match !p with I(_,i,_) -> a.(i) <-a.(i)+1;
+   done;
+   a;;
+
+   let a = Array.make 10 0 in
+   let p = ref (F (3., 4., 6.)) in
+   for i=1 to 100000 do
+       p:=mutate_value Far !p;
+       match !p with F(_,f,_) -> a.(int_of_float f) <-a.(int_of_float f)+1;
+   done;
+   a;;
+*)
+
 let one_dim_succ d n =
   let p = Array.copy n in
   let j = Random.int (Array.length p) in
@@ -176,6 +190,7 @@ let (fchc : out_channel -> ('v SimuState.t -> int) -> 'v SimuState.t -> int
   let cost p = run (point_to_ss p ss_init) in
   let pinit = ss_to_point ss_init in
   let percent_done = ref 0 in  
+  Functory.Cores.set_number_of_cores ss_init.sasarg.cores_nb;
   let g =
     { 
       init = ({ st = pinit ; d = 0 ; cost = cost pinit ; cpt = 0 }, Q.empty, ());
diff --git a/test/coloring/p.ml b/test/coloring/p.ml
index 2178a1396d6dfd06352bcf65fda01f404a59f432..0dd95de9674a157e6c2b4c0226486c292a7b2cb4 100644
--- a/test/coloring/p.ml
+++ b/test/coloring/p.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 12/10/2021 (at 15:42) by Erwan Jahier> *)
+(* Time-stamp: <modified the 14/04/2022 (at 17:17) by Erwan Jahier> *)
 (* This is algo 3.1 in the book *)
 
 open Algo
@@ -16,6 +16,7 @@ let (colors : 'v neighbor list -> 'v list) = fun nl ->
 nb: suppose that all states are in [0;k-1]
 *)
 let (free : 'v neighbor list -> 'v list) = fun nl ->
+  assert (List.for_all (fun n -> state n < k) nl); (* all colors should be < k *)
   let comp_neg x y = - (compare x y) in
   let n_colors = List.map (fun n -> state n) nl in (* neighbor colors *)
   let n_colors = (* neighbor colors, no duplicate, in descending order *)