diff --git a/include/main.h b/include/main.h
index 5d14b9e67e914b738f16631396376358f464acb9..a85c4588debf0a598a976f77523846b2345444c5 100644
--- a/include/main.h
+++ b/include/main.h
@@ -5,6 +5,8 @@
 #include "hmat/hmat.h"
 #include "util.h"
 
+extern char * batch_file;
+
 extern hmat_interface_t * interface;
 
 extern double epsilon;
@@ -58,6 +60,7 @@ int displayArray(char *s, void *f, int m, int n) ;
 int testHMAT(double * relative_error);
 double* createCylinder(void) ;
 int printHelp() ;
+int run_one();
 void prepare_hmat(int, int, int, int, int*, int*, int*, int*, void*, hmat_block_info_t *);
 void advanced_compute_hmat(struct hmat_block_compute_context_t*);
 void update_progress(hmat_progress_t * ctx);
diff --git a/src/main.c b/src/main.c
index e108c0612a940d1f049f55a65ba4594a189db6a3..fb365902742dbef3d7919e39869cc30a751dd218 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,5 +1,6 @@
 #include "main.h"
 
+char * batch_file = NULL;
 hmat_interface_t * interface = NULL;
 double epsilon = 1e-3;
 hmat_progress_t progress;
@@ -13,14 +14,8 @@ void update_progress(hmat_progress_t * ctx) {
   Mpf_progressBar(ctx->current, ctx->max);
 }
 
-/*! \brief Main routine
-  \return 0 for success
-*/
-int main(int argc, char **argv) {
+int run_one() {
   int ierr;
-  
-  printf("[minisolver] minisolver version = %s\n", PACKAGE_VERSION);
-  printf("[minisolver] hmat version = %s\n", HMAT_VERSION);
 
   printf("[minisolver] hmat initialization ... ");
   interface = calloc(1, sizeof(hmat_interface_t)); CHKPTRQ(interface);
@@ -30,27 +25,9 @@ int main(int argc, char **argv) {
   interface->init();
   progress.update = update_progress;
   printf("done\n");
-  
-  if (MpfArgGetInt(&argc, argv, 1, "--size", &nbPts)) {
-    printf("[minisolver] system size = %d\n", nbPts) ;
-  }
-
-  char * compression = NULL;
-  if (MpfArgGetString( &argc, argv, 1, "--compression" , &compression)) {
-    if(strncmp(compression, "medium", 6) == 0) {
-      epsilon = 1e-6;
-    } else if(strncmp(compression, "high", 4) == 0) {
-      epsilon = 1e-10;
-    } else if(strncmp(compression, "disabled", 6) == 0) {
-      epsilon = 1e-16;
-    }
-  } else {
-    compression = strncpy(compression, "low", 3); CHKPTRQ(compression);
-  }
-  printf("[minisolver] compression = %s\n", compression);
-  printf("[minisolver] epsilon = %.0e\n", epsilon);
 
   printf("[minisolver] preparing test ... ");
+  resetCylinder();
   ierr=initCylinder(); CHKERRQ(ierr);
 
   /* Wavelength */
@@ -80,7 +57,6 @@ int main(int argc, char **argv) {
     MpfFree(rhs);
     rhs = NULL;
   }
-  free(compression);
   printf("done\n");
 
   printf("[minisolver] hmat finalization ... ");
@@ -90,3 +66,47 @@ int main(int argc, char **argv) {
 
   return 0;
 }
+
+/*! \brief Main routine
+  \return 0 for success
+*/
+int main(int argc, char **argv) {
+  int ierr;
+  
+  printf("[minisolver] minisolver version = %s\n", PACKAGE_VERSION);
+  printf("[minisolver] hmat version = %s\n", HMAT_VERSION);
+
+  if(MpfArgGetString(&argc, argv, 1, "--batch", &batch_file)) {
+    printf("[minisolver] batch file = %s\n", batch_file);
+    printf("Test 1\n");
+    ierr = run_one(); CHKERRQ(ierr);
+    printf("Test 2\n");
+    ierr = run_one(); CHKERRQ(ierr);
+    return 0;
+  }
+
+  if (MpfArgGetInt(&argc, argv, 1, "--size", &nbPts)) {
+    printf("[minisolver] system size = %d\n", nbPts) ;
+  }
+
+  char * compression = NULL;
+  if (MpfArgGetString( &argc, argv, 1, "--compression" , &compression)) {
+    if(strncmp(compression, "medium", 6) == 0) {
+      epsilon = 1e-6;
+    } else if(strncmp(compression, "high", 4) == 0) {
+      epsilon = 1e-10;
+    } else if(strncmp(compression, "disabled", 6) == 0) {
+      epsilon = 1e-16;
+    }
+  } else {
+    compression = strncpy(compression, "low", 3); CHKPTRQ(compression);
+  }
+  printf("[minisolver] compression = %s\n", compression);
+  printf("[minisolver] epsilon = %.0e\n", epsilon);
+
+  free(compression);
+
+  ierr = run_one(); CHKERRQ(ierr);
+  
+  return 0;
+}