diff --git a/R/mfft_real.R b/R/mfft_real.R
index 6353354480b8ee4e51ae8862c518af8e1e666d90..f3dceb70c42a162bfb05befff9bcb3c3b5ddb294 100644
--- a/R/mfft_real.R
+++ b/R/mfft_real.R
@@ -5,7 +5,7 @@ Q <- function(wT) {sin(wT)/(wT)*(pisquare)/(pisquare-(wT*wT))}
 Qprime <- function(y) {ifelse(y==0, 0, pisquare/(pisquare-y*y)/y*(cos(y)+(sin(y)/y)*(3*y*y-pisquare)/(pisquare-y*y)))}
 Qsecond0 <- 2/pisquare - 1./3. 
 
-mfft_analyse <- function(xdata, nfreq, fast = TRUE, nu = NULL, minfreq=NULL, maxfreq=NULL){
+mfft_analyse <- function(xdata, nfreq, fast = TRUE, nu = NULL, minfreq=NULL, maxfreq=NULL, useCcode = TRUE){
   
   # nu can be provided, in which case the frequencies
   # are considered to be given
@@ -65,13 +65,16 @@ mfft_analyse <- function(xdata, nfreq, fast = TRUE, nu = NULL, minfreq=NULL, max
     # or either they were not provided, but we are in this case where it was set in "m-1" because
     # we identified a non-null frequency
     # in both configurations, we look at a frequency with the fourier transform
-     fbase <- freqs[which.max(power(hx))]
-     brackets <- c(fbase-pi/N, fbase+pi/N);
-    # and then further corrects the brackets if minfreq and maxfreq where provided
-     brackets[1] <- max(minfreq, brackets[1])
-     brackets[2] <- min(maxfreq, brackets[2])
-     thx <- t(hx)
     
+      if (!useCcode) {
+
+       fbase <- freqs[which.max(power(hx))]
+       brackets <- c(fbase-pi/N, fbase+pi/N);
+       # and then further corrects the brackets if minfreq and maxfreq where provided
+       brackets[1] <- max(minfreq, brackets[1])
+       brackets[2] <- min(maxfreq, brackets[2])
+       thx <- t(hx)
+      
     # after profiling, the fastest seems the first option below
     # this is the weak link
     # coding the function in c might be an option
@@ -84,25 +87,10 @@ mfft_analyse <- function(xdata, nfreq, fast = TRUE, nu = NULL, minfreq=NULL, max
        a[1]*a[1] + a[2]*a[2]
      } 
      }
-
-
-#     print ("x[[m]][1,2]")
-#     print (as.double(x[[m]][1:2]))
-
-    localxdata <- as.double(x[[m]])
-#     print ('call it')
-#    OUT <- .C("fastgsec", as.double(minfreq), as.double(maxfreq), 
-#              as.integer(N), localxdata , as.double(rep(0,N)), 
-#              outfreq = 0., DUP=TRUE)
-#     print ('called it')
-
-#     plot (Mod(fft(x[[m]])[0:(N/2)])^2 , type='l')
-
-   fmax = cmna::goldsectmax(tomax(t), 
+     fmax = cmna::goldsectmax(tomax(t), 
                             brackets[1], brackets[2],
                             tol=1.e-10, m=9999)
-   
-
+ 
     # fmax = cmna::goldsectmax(function(f) {
     #                          ft <- f*t
     #                          (sum(hx * cos(ft)))^2 + (sum(hx %*% sin(ft)))^2}, 
@@ -114,10 +102,23 @@ mfft_analyse <- function(xdata, nfreq, fast = TRUE, nu = NULL, minfreq=NULL, max
    #                           brackets[1], brackets[2], tol=1.e-10, m=9999)
 
 
+
+
+      } else {
+#     print ("x[[m]][1,2]")
+#     print (as.double(x[[m]][1:2]))
+
+     localxdata <- as.double(x[[m]])
+     OUT <- .C("fastgsec", as.double(minfreq), as.double(maxfreq), 
+              as.integer(N), localxdata , as.double(rep(0,N)), 
+               outfreq = 0., DUP=TRUE)
+     fmax <- OUT$outfreq
+      }
+  
+
     #print (sprintf("fmaxlocal: %.2f ; fmax with C: %.2f", 
     #               fmax, OUT$outfreq))
 
-#    fmax <- OUT$outfreq
 
     if (fmax > freqs[2]/2){
       # if we really identified a frequency
diff --git a/src/fmft.c b/src/fmft.c
index 0b773e2b8b73f4b42a63bf926eb3d66c057a10c9..504a8af2d5bc4525c23bbec464e9bb52c6ea8925 100644
--- a/src/fmft.c
+++ b/src/fmft.c
@@ -794,470 +794,12 @@ void phifun_real(double *xphi, double *yphi, double freq,
 
 double phisqr_real(double freq, double xdata[], size_t ndata);
 
-void amph_real(double *amp, double *camp, double *samp, 
+void amph_real(double *amp,
     double *phase, double freq, 
 	  double xdata[], size_t ndata);
 
 
-int fmft_real(int *localnfreq, double *localminfreq, double *localmaxfreq, int *localflag, 
-	 int *localndata, double *localxdata, 
-   struct component *signal1, struct component *signal2, struct component *signal3);
-
-
-int fmft_real(int *localnfreq, double *localminfreq, double *localmaxfreq, int *localflag, 
-	 int *localndata, double *localxdata,
-   struct component *signal1, struct component *signal2, struct component *signal3)
-
-/*  struct component signal1[nfreq];*/
-/*  struct component signal2[nfreq];*/
-/*  struct component signal3[nfreq];*/
-/*   struct component* signal1  = new struct component[localnfreq];*/
-/*   struct component* signal2  = new struct component[localnfreq];*/
-/*   struct component* signal3  = new struct component[localnfreq];*/
-
-/* 
-MC : signal1, signal2 and signal3 are now replacing the old output array
-In the output array **output: output[3*flag-2][i], output[3*flag-1][i] 
-and output[3*flag][i] are the i-th frequency, amplitude and phase; nfreq is the 
-number of frequencies to be computed (the units are rad/sep, where sep is the 
-`time' separation between i and i+1. The algorithm is  
-
-Basic Fourier Transform algorithm           if   flag = 0;   not implemented   
-Modified Fourier Transform                  if   flag = 1;
-Frequency Modified Fourier Transform        if   flag = 2;
-FMFT with additional non-linear correction  if   flag = 3
-
-(while the first algorithm is app. 3 times faster than the third one, 
-the third algorithm should be in general much more precise).  
-The computed frequencies are in the range given by minfreq and maxfreq.
-The function returns the number of determined frequencies or 0 in the case
-of error.
-
-The vectors input[1][j] and input[2][j], j = 1 ... ndata (ndata must
-be a power of 2), are the input data X(j-1) and Y(j-1).
-*/   
-     
-{
-  int nearfreqflag;
-  long i,j,k,l,m;
-  float *powsd;
-  double *xdata,  *x, *y;
-  double centerf, leftf, rightf, facplus, facminus, fac,
-         sinplus, cosplus, sinminus, cosminus, factemp,
-         xsum, ysum;
-  double **freq, **amp, **phase, *f, *A, *Ac, *As, *psi;
-  double **Q, **alpha, *B;
-
-  FILE *fp;
-
-  int nfreq = *localnfreq;
-  double minfreq = *localminfreq;
-  double maxfreq = *localmaxfreq;
-  int flag = *localflag;
-  size_t ndata = *localndata;
-  size_t ndata_real = (ndata+1)/2 ; 
-  fastflag = isPowerofTwo(ndata) ;
-
-  if (fastflag)
-    (printf("ndata is power of two: we will be faster ! \n"));
-  if (ndata <= 2){
-    printf("at least 2 data needed - output non-reliable"); return(0);
-  }
-  if (ndata <= nfreq){
-    printf("nfreq must be smaller than nata"); return(0);
-  }
-
-/*  printf("prelimarg %d, %zu %d", nfreq, ndata, flag);*/
-
-  /* ALLOCATION OF VARIABLES */
-
-/*  xdata = dvector(1,ndata);*/
-/*  ydata = dvector(1,ndata);*/
-  x = dvector(1,ndata);
-  y = dvector(1,ndata);
-
-  powsd = vector(1, ndata);
-  
-  freq = dmatrix(1, 3*flag, 1, nfreq); 
-  amp = dmatrix(1, 3*flag, 1, nfreq);
-  phase = dmatrix(1, 3*flag, 1, nfreq);
-
-  f = dvector(1, nfreq);
-  A = dvector(1, nfreq);
-  As = dvector(1, nfreq);
-  Ac = dvector(1, nfreq);
-  psi = dvector(1, nfreq);
-
-  
-  Q = dmatrix(1, 2*nfreq, 1, 2*nfreq); 
-  alpha = dmatrix(1, 2*nfreq, 1, 2*nfreq);
-  B = dvector(1, 2*nfreq);
- 
-
-  /* 1 LOOP FOR MFT, 2 LOOPS FOR FMFT, 3 LOOPS FOR NON-LINEAR FMFT */
-
-  for(l=1; l<=flag; l++){
- 
-    if(l==1){
-      xdata = localxdata -1;  // -1 because dvector vs *double
-/*      ydata = localydata -1;*/
-      /* SEPARATE REAL AND IMAGINERY PARTS */ 
-/*      for(j=1;j<=ndata;j++){*/
-/*  xdata[j] = localxdata[j-1];*/
-/*  ydata[j] = localydata[j-1];*/
-
-    } else {
-
-       /* GENERATE THE QUASIPERIODIC FUNCTION COMPUTED BY MFT */
-      for(i=1;i<=ndata;i++){
-	xdata[i] = 0; 
-	for(k=1;k<=nfreq;k++){
-	  xdata[i] += amp[l-1][k]*cos(freq[l-1][k]*(i-1) + phase[l-1][k]);
-/*    ydata[i] += amp[l-1][k]*sin(freq[l-1][k]*(i-1) + phase[l-1][k]);*/
-	}
-      }
-
-    }
-  
-
-    /* MULTIPLY THE SIGNAL BY A WINDOW FUNCTION, STORE RESULT IN x AND y */
-    window_real(x, xdata, ndata);
-    
-    /* COMPUTE POWER SPECTRAL DENSITY USING FAST FOURIER TRANSFORM */
-    power_real(powsd, x, ndata);
-
-
-    if(l==1)  {
-
-	printf("l=1 ; start the while loop \n");
-      /* CHECK IF THE FREQUENCY IS IN THE REQUIRED RANGE */
-      while((centerf = bracket_real(powsd, ndata)) < minfreq || centerf > maxfreq) {
-
-	printf("centerf = %.2f \n",centerf);
-	/* IF NO, SUBSTRACT IT FROM THE SIGNAL */
-	leftf = centerf - TWOPI / ndata;
-	rightf = centerf + TWOPI / ndata;
-	
-	f[1] = golden_real(phisqr_real, leftf, centerf, rightf, x, ndata);
-	
-	printf("f[1] = %.2f \n",centerf);
-	amph_real(&A[1], &Ac[1], &As[1], &psi[1], f[1], x, ndata);
-	printf("&A[1] = %.2f ; Ac = %.2f ; As = %.2f\n",&A[1], &Ac[1], &As[1]);
-	printf("------\n",centerf);
-	
-	for(j=1;j<=ndata;j++){
-/*    xdata[j] -= A[1]*cos( f[1]*(j-1) + psi[1] );*/
-	  xdata[j] -= Ac[1]*cos( f[1]*(j-1)  );
-	  xdata[j] -= As[1]*sin( f[1]*(j-1)  );
-	}
-
-
-	window_real(x, xdata, ndata);
-	power_real(powsd, x, ndata); 
-      }   }
-
-    else 
-      centerf = freq[1][1];
-
-    leftf = centerf - TWOPI / ndata;
-    rightf = centerf + TWOPI / ndata;
-
-    /* DETERMINE THE FIRST FREQUENCY */
-    f[1] = golden_real(phisqr_real, leftf, centerf, rightf, x, ndata);
-    
-    /* COMPUTE AMPLITUDE AND PHASE */
-    amph_real(&A[1], &Ac[1], &As[1], &psi[1], f[1], x, ndata);
-    
-    /* SUBSTRACT THE FIRST HARMONIC FROM THE SIGNAL */
-    for(j=1;j<=ndata;j++){
-      xdata[j] -= Ac[1]*cos( f[1]*(j-1)  );
-      xdata[j] -= As[1]*sin( f[1]*(j-1)  );
-    }    
-    /* HERE STARTS THE MAIN LOOP  *************************************/ 
-    
-    printf("start the main loop \n");
-    Q[1][1] = 1;
-    alpha[1][1] = 1;
-    
-    for(m=2;m<=nfreq;m++){
-    printf("m = %i \n", m );
-      /* MULTIPLY SIGNAL BY WINDOW FUNCTION */
-      window_real(x, xdata, ndata);
-      
-      /* COMPUTE POWER SPECTRAL DENSITY USING FAST FOURIER TRANSFORM */
-      power_real(powsd, x, ndata);
-      
-      if(l==1){
-	
-	centerf = bracket_real(powsd, ndata);
-
-	leftf = centerf - TWOPI / ndata;
-	rightf = centerf + TWOPI / ndata;
-
-	f[m] = golden_real(phisqr_real, leftf, centerf, rightf, x, ndata);
-
-	/* CHECK WHETHER THE NEW FREQUENCY IS NOT TOO CLOSE TO ANY PREVIOUSLY
-	   DETERMINED ONE */
-	nearfreqflag = 0;
-	for(k=1;k<=m-1;k++) if( fabs(f[m] - f[k]) < FMFT_NEAR*TWOPI/ndata )   nearfreqflag = k; 
-	    
-	/* CHECK IF THE FREQUENCY IS IN THE REQUIRED RANGE */
-	while(f[m] < minfreq || f[m] > maxfreq || nearfreqflag > 0){
-	  
-	  printf("centerf = %.2f \n",centerf);
-	  /* IF NO, SUBSTRACT IT FROM THE SIGNAL */
-	  leftf = centerf - TWOPI / ndata;
-	  rightf = centerf + TWOPI / ndata;
-	  
-	  f[m] = golden_real(phisqr_real, leftf, centerf, rightf, x, ndata);
-	  
-	printf("f[%i] = %.2f (minfreq= %.2f, maxfreq=%.2f) \n",m, f[m], minfreq, maxfreq);
-	  amph_real(&A[m], &Ac[m], &As[m], &psi[m], f[m], x,  ndata);
-	printf("&A[1] = %.2f ; Ac = %.2f ; As = %.2f\n",&A[1], &Ac[1], &As[1]);
-	printf("------\n",centerf);
-	  
-	  for(j=1;j<=ndata;j++){
-	    xdata[j] -= Ac[m]*cos( f[m]*(j-1)  );
-	    xdata[j] -= As[m]*sin( f[m]*(j-1)  );
-	  }
-	  
-	  /* AND RECOMPUTE THE NEW ONE */
-	  window_real(x, xdata, ndata);
-	  
-	  power_real(powsd, x, ndata); 
-	  
-	  centerf = bracket_real(powsd, ndata); 
-
-	  leftf = centerf - TWOPI / ndata;
-	  rightf = centerf + TWOPI / ndata;
-	  
-	  f[m] = golden_real(phisqr_real, leftf, centerf, rightf, x, ndata);
-	  
-	  nearfreqflag = 0.;
-	  for(k=1;k<=m-1;k++)
-	    if( fabs(f[m] - f[k]) < FMFT_NEAR*TWOPI/ndata )   nearfreqflag = 1; 
-
-	}   
-
-      } else {  
-	
-	centerf = freq[1][m];
-	
-	leftf = centerf - TWOPI / ndata;
-	rightf = centerf + TWOPI / ndata;
-	
-	/* DETERMINE THE NEXT FREQUENCY */
-	f[m] = golden_real(phisqr_real, leftf, centerf, rightf, x,  ndata);
-	
-      }
-
-      /* COMPUTE ITS AMPLITUDE AND PHASE */
-      amph_real(&A[m], &Ac[m], &As[m],  &psi[m], f[m], x, ndata);
-      
-      /* EQUATION (3) in Sidlichovsky and Nesvorny (1997) */
-	    facplus = (f[m] + f[m]) * (ndata - 1.) / 2.;
-	    facminus = 0.;
-
-      facplus= sin(facplus)/facplus * PI*PI / (PI*PI - facplus*facplus);
-      facminus= 1.;
-
-      sinplus = 0.5 * sin(2*f[m]) * facplus;
-      sinminus = 0.;
-      cosplus = 0.5 * cos(2*f[m]) * facplus;
-      cosminus =  facplus;
-    	Q[2*m-1][2*m-1] = (cosminus + cosplus);
-    	Q[2*m-1][2*m]   = sinplus;
-    	Q[2*m][2*m-1]   = sinplus;
-    	Q[2*m][2*m]     = (cosminus - cosplus);
-
-
-      for(j=1;j<=m-1;j++){
-
-	facplus = (f[m] + f[j]) * (ndata - 1.) / 2.;
-	facminus = (f[m] - f[j]) * (ndata - 1.) / 2.;
-  facminus= sin(facminus)/facminus * PI*PI / (PI*PI - facminus*facminus);
-  facplus= sin(facplus)/facplus * PI*PI / (PI*PI - facplus*facplus);
-
-
-  sinplus  = 0.5 * sin(f[m] + f[j]) * facplus ; 
-  sinminus = 0.5 * sin(f[m] - f[j]) * facminus ; 
-  cosplus  = 0.5 * sin(f[m] + f[j]) * facplus ; 
-  cosminus = 0.5 * sin(f[m] + f[j]) * facminus ; 
-
-  // coscos, cossin, sincos, sinsin
-	Q[2*m-1][2*j-1] = (cosminus + cosplus);
-	Q[2*m-1][2*j] =   (sinplus - sinminus);
-	Q[2*m][2*j-1] =   (sinplus + sinminus);
-	Q[2*m][2*j] =     (cosminus - cosplus);
-
-  // the symmetrics are, indeed, symmetric
-  //
-	Q[2*m-1][2*j-1] = Q[2*j-1][2*m-1];
-	Q[2*m-1][2*j  ] = Q[2*j-1][2*m  ];
-	Q[2*m  ][2*j-1] = Q[2*j  ][2*m-1];
-	Q[2*m  ][2*j  ] = Q[2*j  ][2*m  ];
-
-      }
-      
-      /* EQUATION (17) */
-      for(k=1;k<=2*m-1;k++){
-	B[k] = 0;
-	for(j=1;j<=k;j++)
-	  B[k] += -alpha[k][j]*Q[m][j];
-      }
 
-      /* EQUATION (18) */
-      alpha[m][m] = 1;
-      for(j=1;j<=2*m-1;j++)
-	alpha[m][m] -= B[j]*B[j];
-      alpha[m][m] = 1. / sqrt(alpha[m][m]);
-      
-      
-      /* EQUATION (19) */
-      for(k=1;k<=2*m-1;k++){
-	alpha[m][k] = 0;
-	for(j=k;j<=2*m-1;j++)
-	  alpha[m][k] += B[j]*alpha[j][k];
-	alpha[m][k] = alpha[m][m]*alpha[m][k];
-      }
- 
-/* ICICICICICI */ 
-
-      /* EQUATION (22) */
-      for(i=1;i<=ndata;i++){
-	xsum=0; ysum=0;
-  /* on est a l'equation 21
-   * la difficulte est que f_m est en fait f_(2m)
-   * il faut retnancher deux composantet
-   * f[2m] = f_[2m-1] - a(2m)(2m) f_[2m-1]*sum1
-   * f_[2m-1] = f_[2m-2] - a(2m-1)(2m-1) f_[2m-2]*sum2 */
-	for(j=1;j<=2*m;j=j+2){
-    fac = f[j]*(i-1) ;
-	  xsum += alpha[2*m-1][2*j-1]*cos(fac);
-	  xsum += alpha[2*m-1][2*j]*sin(fac);
-	  ysum += alpha[2*m][2*j-1]*cos(fac);
-	  ysum += alpha[2*m][2*j]*sin(fac);
-	}
-	xdata[i] -= alpha[2*m-1][2*m-1]*Ac[m]*xsum;
-	xdata[i] -= alpha[2*m][2*m]*As[m]*ysum;
-	xdata[i] -= alpha[2*m][2*m-1]*As[m]*sin(fac);
-      }
-    }
-    
-    /* EQUATION (26) */
-    for(k=1;k<=nfreq;k++){
-      xsum=0; ysum=0;
-      for(j=k;j<=nfreq;j++){
-      	xsum += alpha[2*j-1][2*j-1]*alpha[2*j-1][2*k-1]*Ac[j];
-      	xsum += alpha[2*j-1][2*j-1]*alpha[2*j-1][2*k]*Ac[j];
-      	ysum += alpha[2*j][2*j]*alpha[2*j][2*k-1]*As[j];
-      	ysum += alpha[2*j][2*j]*alpha[2*j][2*k]*As[j];
-      }
-        xsum += alpha[2*k-1][2*k-1]*alpha[2*k-1][2*k]*Ac[k];
-       A[k] = sqrt(xsum*xsum + ysum*ysum);
-       Ac[k] = xsum;
-       As[k] = ysum;
-       psi[k] = -atan2(ysum,xsum);
-    }
-    
-    /* REMEMBER THE COMPUTED VALUES FOR THE FMFT */
-    for(k=1;k<=nfreq;k++){
-      freq[l][k] = f[k];
-      amp[l][k] = A[k];
-      phase[l][k] = psi[k];
-  }
-  }
-  /* RETURN THE FINAL FREQUENCIES, AMPLITUDES AND PHASES */ 
-
-  
-   for(k=1;k<=nfreq;k++){
-     signal1[k-1].freq = freq[1][k];            
-     signal1[k-1].amp = amp[1][k];
-     signal1[k-1].phase = phase[1][k];
- 
-     if(signal1[k-1].phase < -PI) signal1[k-1].phase += TWOPI;
-     if(signal1[k-1].phase >= PI) signal1[k-1].phase -= TWOPI;
-   }
-   
-   if(flag==2 || flag==3){
- 
- 
-     for(k=1;k<=nfreq;k++){
-       signal2[k-1].freq = freq[1][k] + (freq[1][k] - freq[2][k]);            
-       signal2[k-1].amp = amp[1][k] + (amp[1][k] - amp[2][k]);
-       signal2[k-1].phase = phase[1][k] + (phase[1][k] - phase[2][k]);
-       
-       if(signal2[k-1].phase < -PI) signal2[k-1].phase += TWOPI;
-       if(signal2[k-1].phase >= PI) signal2[k-1].phase -= TWOPI;
-     }
-   
-   if(flag==3){
-     for(k=1;k<=nfreq;k++){
-       
-       signal3[k-1].amp = freq[1][k];
-       if(fabs((fac = freq[2][k] - freq[3][k])/freq[2][k]) > FMFT_TOL)
- 	signal3[k-1].freq += DSQR(freq[1][k] - freq[2][k]) / fac;
-       else 
- 	signal3[k-1].freq += freq[1][k] - freq[2][k]; 
- 
-       signal3[k-1].amp = amp[1][k];
-       if(fabs((fac = amp[2][k] - amp[3][k])/amp[2][k]) > FMFT_TOL)
- 	signal3[k-1].amp += DSQR(amp[1][k] - amp[2][k]) / fac;
-       else
- 	signal3[k-1].amp += amp[1][k] - amp[2][k]; 
- 
-       signal3[k].phase = phase[1][k];
-       if(fabs((fac = phase[2][k] - phase[3][k])/phase[2][k]) > FMFT_TOL)
- 	signal3[k-1].phase += DSQR(phase[1][k] - phase[2][k]) / fac;
-       else
- 	signal3[k-1].phase += phase[1][k] - phase[2][k]; 
- 
-       if(signal3[k-1].phase < -PI) signal3[k-1].phase += TWOPI;
-       if(signal3[k-1].phase >= PI) signal3[k-1].phase -= TWOPI;
-     }
-   }
-   }
- 
-   /* SORT THE FREQUENCIES IN DECREASING ORDER OF AMPLITUDE */
- 
-   int cmpfunc (const void * a, const void * b){
-    return ( (*(struct component *)b).amp > (*(struct component *)a).amp);
-   }
- 
-/*   if(flag==1) */
-     qsort(signal1,nfreq,sizeof(struct component), cmpfunc);
-   
-/*   if(flag > 1){*/
-     qsort(signal2,nfreq,sizeof(struct component), cmpfunc);
-/*   }*/
- 
-/*   if(flag==3){*/
-     qsort(signal3,nfreq,sizeof(struct component), cmpfunc);
-/*   }*/
-  /* FREE THE ALLOCATED VARIABLES */
-/*  free_dvector(xdata, 1, ndata);*/
-/*  free_dvector(ydata, 1, ndata);*/
-
-  free_dvector(x, 1, ndata);
-  free_dvector(y, 1, ndata);
-  free_vector(powsd, 1, ndata);
-  
-  free_dmatrix(freq, 1, 3*flag, 1, nfreq); 
-  free_dmatrix(amp, 1, 3*flag, 1, nfreq);
-  free_dmatrix(phase, 1, 3*flag, 1, nfreq);
-
-  free_dvector(f, 1, nfreq);
-  free_dvector(A, 1, nfreq);
-  free_dvector(Ac, 1, nfreq);
-  free_dvector(As, 1, nfreq);
-  free_dvector(psi, 1, nfreq);
- 
-  free_dmatrix(Q, 1, 2*nfreq, 1, 2*nfreq); 
-  free_dmatrix(alpha, 1, 2*nfreq, 1, 2*nfreq);
-  free_dvector(B, 1, 2*nfreq);
-
-  return 1;
-}
 
 
 void window_real(double *x, double *xdata, size_t ndata)
@@ -1404,7 +946,7 @@ double golden_real(double (*f)(double, double *, size_t),
   else return x2;
 }
 
-void amph_real(double *amp, double *camp, double *samp, 
+void amph_real(double *amp, 
     double *phase, double freq, 
 	  double xdata[], size_t ndata){
 
@@ -1500,7 +1042,7 @@ void phifun_real(double *xphi, double *yphi, double freq,
 
 /*}*/
 
- printf("xdata2[12] = %.2f, *xphi = %.2f , *yphi = %.2f \n", xdata2[12], xphi, yphi );
+/* printf("xdata2[12] = %.2f, *xphi = %.2f , *yphi = %.2f \n", xdata2[12], xphi, yphi );*/
 
 free_dvector(xdata2,1,n);
 /*free_dvector(ydata2,1,n);*/
@@ -1517,7 +1059,7 @@ int fastgsec(double *localminfreq, double *localmaxfreq,
   int nearfreqflag;
   long j;
   float *powsd;
-  double *xdata, *ydata, *x, *y;
+  double *xdata,  *x;
   double centerf, leftf, rightf;
   double f, A, psi;
 
@@ -1544,21 +1086,24 @@ int fastgsec(double *localminfreq, double *localmaxfreq,
 /*  xdata = dvector(1,ndata);*/
 /*  ydata = dvector(1,ndata);*/
   x = dvector(1,ndata);
-  y = dvector(1,ndata);
+/*  y = dvector(1,ndata);*/
 
   powsd = vector(1, ndata);
   
 
    xdata = localxdata -1;  // -1 because dvector vs *double
-   ydata = localydata -1;
+/*   ydata = localydata -1;*/
   
+/*      printf("ici0000");*/
     /* MULTIPLY THE SIGNAL BY A WINDOW FUNCTION, STORE RESULT IN x AND y */
-    window(x, y, xdata, ydata, ndata);
+    window_real(x,  xdata, ndata);
     
+/*      printf("ici0001");*/
 
     /* COMPUTE POWER SPECTRAL DENSITY USING FAST FOURIER TRANSFORM */
-    power(powsd, x, y, ndata);
+    power_real(powsd, x, ndata);
 
+/*      printf("ici0002");*/
 
       /* CHECK IF THE FREQUENCY IS IN THE REQUIRED RANGE */
       while((centerf = bracket_real(powsd, ndata)) < minfreq || centerf > maxfreq) {
@@ -1566,32 +1111,36 @@ int fastgsec(double *localminfreq, double *localmaxfreq,
 	/* IF NO, SUBSTRACT IT FROM THE SIGNAL */
 	leftf = centerf - TWOPI / ndata;
 	rightf = centerf + TWOPI / ndata;
+/*      printf("ici0");*/
 	
-	f =  golden(phisqr, leftf, centerf, rightf, x, y, ndata);
+
+	f =  golden_real(phisqr_real, leftf, centerf, rightf, x, ndata);
+/*      printf("ici01");*/
 	
-	amph(&A, &psi, f, x, y, ndata);
+amph_real(&A, &psi, f, x, ndata);
 	
 	for(j=1;j<=ndata;j++){
 	  xdata[j] -= A*cos( f*(j-1) + psi );
-	  ydata[j] -= A*sin( f*(j-1) + psi );
 	}
 
-	window(x, y, xdata, ydata, ndata);
+	window_real(x, xdata, ndata);
 
-	power(powsd, x, y, ndata); 
+	power_real(powsd, x, ndata); 
       }   
 
+/*      printf("ici1");*/
 
     leftf = centerf - TWOPI / ndata;
     rightf = centerf + TWOPI / ndata;
 
     /* DETERMINE THE FIRST FREQUENCY */
-    f = golden(phisqr, leftf, centerf, rightf, x, y, ndata);
+    f = golden_real(phisqr_real, leftf, centerf, rightf, x, ndata);
     
+/*      printf("ici2");*/
     *outfreq = f ; 
 
     /* COMPUTE AMPLITUDE AND PHASE */
-    amph(&A, &psi, f, x, y, ndata);
+    amph_real(&A, &psi, f, x, ndata);
     
     /* SUBSTRACT THE FIRST HARMONIC FROM THE SIGNAL */
     for(j=1;j<=ndata;j++){
@@ -1599,7 +1148,7 @@ int fastgsec(double *localminfreq, double *localmaxfreq,
     }  
 
   free_dvector(x, 1, ndata);
-  free_dvector(y, 1, ndata);
+/*  free_dvector(y, 1, ndata);*/
   free_vector(powsd, 1, ndata);