diff --git a/v2/libtpcnlopt/praxis.c b/v2/libtpcnlopt/praxis.c
index 5f72d8f83196506a7479cfd9c75d250bd7e968e4..2e9eace71e7b01ccb9caa6987522dfd18f60a2cc 100644
--- a/v2/libtpcnlopt/praxis.c
+++ b/v2/libtpcnlopt/praxis.c
@@ -126,7 +126,7 @@ int nloptPowellBrent(
     }
     h/=(double)(nlo->totalNr-fixedNr);
     t/=(double)(nlo->totalNr-fixedNr);
-    if(verbose>2) printf("xdelta_min := %g\nxdelta_max := %g\n", min, max);
+    if(verbose>2) {printf("xdelta_min := %g\nxdelta_max := %g\n", min, max); fflush(stdout);}
     scbd+=log10(max/min); // >1 if param scales are different
     t2=small+fabs(t); t=t2;
     if(h<100.0*t) h=100.0*t;
@@ -135,6 +135,7 @@ int nloptPowellBrent(
     printf("step := %g\n", h);
     printf("scbd := %g\n", scbd);
     printf("t(2) := %g\n", t);
+    fflush(stdout);
   }
   if(isnan(scbd)) { // checking that user provided xdeltas
     statusSet(status, __func__, __FILE__, __LINE__, TPCERROR_INVALID_VALUE);
@@ -148,6 +149,7 @@ int nloptPowellBrent(
   int illc=0;
 
   /* Initialize */
+  if(verbose>2) {printf("initializing\n"); fflush(stdout);}
   unsigned int i, j, dim=nlo->totalNr;
   double ldfac; if(illc) ldfac=0.1; else ldfac=0.01;
   unsigned int nl=0, kt=0;
@@ -156,9 +158,19 @@ int nloptPowellBrent(
   double ldt=h;
   double d[dim], y[dim], z[dim];
   // double v[dim][dim];
-  double **v=malloc(dim*sizeof(double *));
-  for(i=0; i<dim; i++) v[i]=malloc(dim*sizeof(double));
+  double **v=malloc(dim*sizeof(double *)); if(v==NULL) {
+    statusSet(status, __func__, __FILE__, __LINE__, TPCERROR_OUT_OF_MEMORY);
+    return TPCERROR_OUT_OF_MEMORY;
+  }
+  for(i=0; i<dim; i++) {
+    v[i]=malloc(dim*sizeof(double));
+    if(v[i]==NULL) {
+      statusSet(status, __func__, __FILE__, __LINE__, TPCERROR_OUT_OF_MEMORY);
+      return TPCERROR_OUT_OF_MEMORY;
+    }
+  }
   /* Make a copy of parameter list */
+  if(verbose>2) {printf("copying parameters\n"); fflush(stdout);}
   double p[dim];
   for(i=0; i<dim; i++) p[i]=nlo->xfull[i];
   
@@ -171,14 +183,17 @@ int nloptPowellBrent(
   
   
   /* Calculate function value with the initial guess */
+  if(verbose>2) {printf("evaluating initial guess\n"); fflush(stdout);}
   double fx, qf1;
   fx=qf1=(*nlo->_fun)(nlo->totalNr, nlo->xfull, nlo->fundata);
   nf++;
   if(!isfinite(fx)) {
+    for(i=0; i<dim; i++) free(v[i]); 
+    free(v);
     statusSet(status, __func__, __FILE__, __LINE__, TPCERROR_INVALID_VALUE);
     return TPCERROR_INVALID_VALUE;
   }
-  if(verbose>1) printf("initial_objfunc := %g\n", fx);
+  if(verbose>1) {printf("initial_objfunc := %g\n", fx); fflush(stdout);}
   
   
   /* The main loop */
@@ -186,7 +201,10 @@ int nloptPowellBrent(
   int done=0, nLoop=0, ret=0;
   while(!done) {
     nLoop++;
-    if(verbose>2) printf("\n-------------------------------\nloop %d\n", nLoop);
+    if(verbose>2) {
+      printf("\n-------------------------------\nloop %d, with %d fcalls\n", nLoop, nf); 
+      fflush(stdout);
+    }
     sf=d[0]; s=d[0]=0.0;
     
     /* Minimize along the first direction */
@@ -309,7 +327,10 @@ int nloptPowellBrent(
      * We are probably in a curved valley, try quadratic extrapolation
      */
     /* but only if we have more than one parameter to fit */
-    if(dim<2) continue;
+    if(dim<2) {
+      if(nf>1000) done=1;
+      continue;
+    }
 
     /* Praxis quad: 
        looks for the minimum along a curve defined by q0, q1, and x (q2). */