diff --git a/CUtils/CUtils.xs b/CUtils/CUtils.xs
index a4308ab189819909304e1bb4ab70398c377945c3..85acfd028ec70f69ab6e86126ca575b9abff7d83 100644
--- a/CUtils/CUtils.xs
+++ b/CUtils/CUtils.xs
@@ -7,6 +7,7 @@
 #include "fisher.h"
 #include "chisq.h"
 #include "double_permutation.h"
+#include "resampling.h"
 #include "stats.h"
 
 #include "const-c.inc"
@@ -15,6 +16,11 @@ MODULE = ALTree::CUtils		PACKAGE = ALTree::CUtils
 
 INCLUDE: const-xs.inc
 
+############################################################
+# fisher.h
+############################################################
+
+
 double
 bilateral(a, b, c, d)
 	double	a
@@ -23,9 +29,11 @@ bilateral(a, b, c, d)
 	double	d
 
 double
-critchi(p, df)
-	double	p
-	int	df
+right(a, b, c, d)
+	double	a
+	double	b
+	double	c
+	double	d
 
 double
 left(a, b, c, d)
@@ -34,17 +42,23 @@ left(a, b, c, d)
 	double	c
 	double	d
 
+############################################################
+# chisq.h
+############################################################
+
 double
 pochisq(x, df)
 	double	x
 	int	df
 
 double
-right(a, b, c, d)
-	double	a
-	double	b
-	double	c
-	double	d
+critchi(p, df)
+	double	p
+	int	df
+
+############################################################
+# double_permutation.h
+############################################################
 
 HV *
 DoublePermutation(nb_sample, nb_chi2, data)
@@ -109,6 +123,10 @@ DoublePermutation(nb_sample, nb_chi2, data)
     OUTPUT:
         RETVAL
 
+############################################################
+# stats.h
+############################################################
+
 void
 ClassicalChi2(tabnodes)
 	AV * tabnodes
@@ -142,10 +160,11 @@ ClassicalChi2(tabnodes)
 
 	res=classical_chi2(nb_nodes, nodes);
 
-	XPUSHs(sv_2mortal(newSVnv(res.chi2)));
-	XPUSHs(sv_2mortal(newSViv(res.chi2invalid)));
-	XPUSHs(sv_2mortal(newSViv(res.error)));
-	XPUSHs(sv_2mortal(newSViv(res.sum_control)));
-	XPUSHs(sv_2mortal(newSViv(res.sum_case)));
+	EXTEND(SP, 5);
+	PUSHs(sv_2mortal(newSVnv(res.chi2)));
+	PUSHs(sv_2mortal(newSViv(res.chi2invalid)));
+	PUSHs(sv_2mortal(newSViv(res.error)));
+	PUSHs(sv_2mortal(newSViv(res.sum_control)));
+	PUSHs(sv_2mortal(newSViv(res.sum_case)));
 
 	free(nodes);
diff --git a/CUtils/c_sources/debug.h b/CUtils/c_sources/debug.h
new file mode 100644
index 0000000000000000000000000000000000000000..7b73655c507283a3ec8edadc98dbda7d2b68e309
--- /dev/null
+++ b/CUtils/c_sources/debug.h
@@ -0,0 +1,15 @@
+#ifndef _DEBUG_H
+#define _DEBUG_H
+
+#define DEBUG
+
+#ifdef DEBUG
+#  include <stdio.h>
+#  define debug(str,...) fprintf(stderr, str "\n", ##__VA_ARGS__)
+#else
+#  define debug(str,...) ((void)0)
+#  define NDEBUG
+#endif
+#include <assert.h>
+
+#endif
diff --git a/CUtils/c_sources/double_permutation.c b/CUtils/c_sources/double_permutation.c
index 6d161203e9e8a96ed690a0169b8975ea37afd311..4cc4ae8074facb7178d451005202534b8402cfd8 100644
--- a/CUtils/c_sources/double_permutation.c
+++ b/CUtils/c_sources/double_permutation.c
@@ -183,7 +183,7 @@ int main(int argc, char *argv[])
 	int nb_sample, nb_chi2;
 	matrice_t mat;
 	replicat_t rep;
-	int j;
+	int j,i;
 	datatype_t min;
 
 	nb_sample=atoi(argv[1]);
@@ -194,12 +194,27 @@ int main(int argc, char *argv[])
 
 	read_matrice(mat, nb_sample, nb_chi2);
 	//printf("Matrice lue\n");
+	for(i=0; i<nb_sample; i++) {
+		for(j=0; j<nb_chi2; j++) {
+			printf("\t"CONV, mat[j][i]);
+		}
+		printf("\n");
+	}
 
-	min=calcul(nb_sample, nb_chi2, mat, rep);
+	ensemble_t ens_min_pval;
+
+	ens_min_pval=alloc_ensemble(nb_sample);
+	
+	min=double_permutation(nb_sample, nb_chi2, mat, rep, ens_min_pval);
+
+	free_ensemble(ens_min_pval);
 
 	for (j=0; j<nb_chi2; j++) {
 		printf("chi2 niveau %i, pval nc "CONV"\n", j+1, rep[j]);
 	}
+	for (i=0; i<nb_sample; i++) {
+		printf("sample %i, pval min "CONV"\n", i, ens_min_pval[i]);
+	}
 	printf("pmin corrigé: "CONV"\n", min);
 
 	free_matrice(mat, nb_sample, nb_chi2);
diff --git a/CUtils/c_sources/fisher.c b/CUtils/c_sources/fisher.c
index 772c4e23fb4f0d89a2e2252be4d73429f187045b..3fc4ff91c47b194deb9c5d03701aee71a3dff2f5 100644
--- a/CUtils/c_sources/fisher.c
+++ b/CUtils/c_sources/fisher.c
@@ -1,6 +1,7 @@
 
 #include "fisher.h"
 #include <math.h>
+#include <stdlib.h>
 
 typedef struct {
 	double bilateral;
@@ -164,7 +165,7 @@ static result_t fisher(double n11, double n12, double n21, double n22)
 	double n1_;
 	double n_1;
 	double n;
-	double prob;
+	//double prob;
 
 	if(n11<0) n11 *= -1;
 	if(n12<0) n12 *= -1;
@@ -174,7 +175,8 @@ static result_t fisher(double n11, double n12, double n21, double n22)
 	n1_ = n11+n12;
 	n_1 = n11+n21;
 	n   = n11 +n12 +n21 +n22;
-	prob=exact(n11,n1_,n_1,n);
+	//prob=
+	exact(n11,n1_,n_1,n);
 	
 	res.bilateral=sleft+sright;
 	res.left=sless;
diff --git a/CUtils/c_sources/stats.c b/CUtils/c_sources/stats.c
index 4a4bbb762b3bf595c145878a322669c885913617..fa30647b641bbf721a65fddbfa80daa2cf6536da 100644
--- a/CUtils/c_sources/stats.c
+++ b/CUtils/c_sources/stats.c
@@ -1,4 +1,5 @@
 
+#include "debug.h"
 #include "stats.h"
 #include <stdio.h>
 #include <stdlib.h>