Index: extensions/test_app/ta_bench.c
===================================================================
--- extensions/test_app/ta_bench.c	(revision 572)
+++ extensions/test_app/ta_bench.c	(revision 575)
@@ -39,8 +39,4 @@
 
 #include <semaphore.h>
-
-/* The number of messages that can be sent before waiting for a corresponding answer */
-#define NB_CONCURRENT_MESSAGES	100
-
 #include <stdio.h>
 
@@ -50,5 +46,5 @@
 };
 
-static sem_t ta_sem;
+static sem_t ta_sem; /* To handle the concurrency */
 
 /* Cb called when an answer is received */
@@ -221,7 +217,7 @@
 	CHECK_POSIX_DO( pthread_mutex_unlock(&ta_conf->stats_lock), );
 	
-	/* We will run for 10 seconds */
+	/* We will run for ta_conf->bench_duration seconds */
 	CHECK_SYS_DO( clock_gettime(CLOCK_REALTIME, &end_time), );
-	end_time.tv_sec += 10;
+	end_time.tv_sec += ta_conf->bench_duration;
 	
 	/* Now loop until timeout is reached */
@@ -254,21 +250,19 @@
 	if (now.tv_nsec >= end_time.tv_nsec) {
 		fd_log_debug( " Executing for: %d.%06ld sec\n",
-				(int)(now.tv_sec + 10 - end_time.tv_sec),
+				(int)(now.tv_sec + ta_conf->bench_duration - end_time.tv_sec),
 				(long)(now.tv_nsec - end_time.tv_nsec) / 1000);
 	} else {
 		fd_log_debug( " Executing for: %d.%06ld sec\n",
-				(int)(now.tv_sec + 9 - end_time.tv_sec),
+				(int)(now.tv_sec + ta_conf->bench_duration - 1 - end_time.tv_sec),
 				(long)(now.tv_nsec + 1000000000 - end_time.tv_nsec) / 1000);
 	}
 	fd_log_debug( "   %llu messages sent\n", end.nb_sent - start.nb_sent);
-	fd_log_debug( "   %llu errors received\n", end.nb_errs - start.nb_errs);
-	fd_log_debug( "   %llu answers received\n", end.nb_recv - start.nb_recv);
+	fd_log_debug( "   %llu error(s) received\n", end.nb_errs - start.nb_errs);
+	fd_log_debug( "   %llu answer(s) received\n", end.nb_recv - start.nb_recv);
 	fd_log_debug( "   Overall:\n");
 	fd_log_debug( "     fastest: %ld.%06ld sec.\n", end.shortest / 1000000, end.shortest % 1000000);
 	fd_log_debug( "     slowest: %ld.%06ld sec.\n", end.longest / 1000000, end.longest % 1000000);
 	fd_log_debug( "     Average: %ld.%06ld sec.\n", end.avg / 1000000, end.avg % 1000000);
-	fd_log_debug( "   Throughput: %llu message / sec\n", (end.nb_recv - start.nb_recv) / (( now.tv_sec + 10 - end_time.tv_sec ) + ((now.tv_nsec - end_time.tv_nsec) / 1000000000)));
-	
-
+	fd_log_debug( "   Throughput: %llu messages / sec\n", (end.nb_recv - start.nb_recv) / (( now.tv_sec + ta_conf->bench_duration - end_time.tv_sec ) + ((now.tv_nsec - end_time.tv_nsec) / 1000000000)));
 	fd_log_debug( "-------------------------------------\n");
 
@@ -278,5 +272,5 @@
 int ta_bench_init(void)
 {
-	CHECK_SYS( sem_init( &ta_sem, 0, NB_CONCURRENT_MESSAGES) );
+	CHECK_SYS( sem_init( &ta_sem, 0, ta_conf->bench_concur) );
 
 	CHECK_FCT( fd_sig_register(ta_conf->signal, "test_app.bench", ta_bench_start ) );
Index: extensions/test_app/ta_conf.y
===================================================================
--- extensions/test_app/ta_conf.y	(revision 572)
+++ extensions/test_app/ta_conf.y	(revision 575)
@@ -188,4 +188,10 @@
 				ta_conf->mode |= MODE_BENCH;
 			}
+			| BENCH INTEGER INTEGER ';'
+			{
+				ta_conf->mode |= MODE_BENCH;
+				ta_conf->bench_duration = $2;
+				ta_conf->bench_concur   = $3;
+			}
 			;
 
Index: extensions/test_app/ta_serv.c
===================================================================
--- extensions/test_app/ta_serv.c	(revision 572)
+++ extensions/test_app/ta_serv.c	(revision 575)
@@ -101,4 +101,9 @@
 	CHECK_FCT( fd_msg_send( msg, NULL, NULL ) );
 	
+	/* Add this value to the stats */
+	CHECK_POSIX_DO( pthread_mutex_lock(&ta_conf->stats_lock), );
+	ta_conf->stats.nb_echoed++;
+	CHECK_POSIX_DO( pthread_mutex_unlock(&ta_conf->stats_lock), );
+	
 	return 0;
 }
Index: extensions/test_app/test_app.c
===================================================================
--- extensions/test_app/test_app.c	(revision 572)
+++ extensions/test_app/test_app.c	(revision 575)
@@ -59,4 +59,6 @@
 	ta_conf->dest_host  = NULL;
 	ta_conf->signal     = TEST_APP_DEFAULT_SIGNAL;
+	ta_conf->bench_concur   = 100;
+	ta_conf->bench_duration = 10;
 	
 	/* Initialize the mutex */
@@ -82,5 +84,5 @@
 }
 
-/* Function to display statistics every 10 seconds */
+/* Function to display statistics periodically */
 static void * ta_stats(void * arg) {
 
@@ -93,6 +95,6 @@
 	/* Now, loop until canceled */
 	while (1) {
-		/* Display statistics every 30 seconds */
-		sleep(30);
+		/* Display statistics every XX seconds */
+		sleep(ta_conf->bench_duration * 3);
 		
 		/* Now, get the current stats */
@@ -117,11 +119,11 @@
 		
 		if (ta_conf->mode & MODE_SERV) {
-			fd_log_debug( " Server: %llu messages echoed\n", copy.nb_echoed);
+			fd_log_debug( " Server: %llu message(s) echoed\n", copy.nb_echoed);
 		}
 		if (ta_conf->mode & MODE_CLI) {
 			fd_log_debug( " Client:\n");
-			fd_log_debug( "   %llu messages sent\n", copy.nb_sent);
-			fd_log_debug( "   %llu errors received\n", copy.nb_errs);
-			fd_log_debug( "   %llu answers received\n", copy.nb_recv);
+			fd_log_debug( "   %llu message(s) sent\n", copy.nb_sent);
+			fd_log_debug( "   %llu error(s) received\n", copy.nb_errs);
+			fd_log_debug( "   %llu answer(s) received\n", copy.nb_recv);
 			fd_log_debug( "     fastest: %ld.%06ld sec.\n", copy.shortest / 1000000, copy.shortest % 1000000);
 			fd_log_debug( "     slowest: %ld.%06ld sec.\n", copy.longest / 1000000, copy.longest % 1000000);
Index: extensions/test_app/test_app.h
===================================================================
--- extensions/test_app/test_app.h	(revision 572)
+++ extensions/test_app/test_app.h	(revision 575)
@@ -65,4 +65,6 @@
 	char 	*	user_name;	/* default NULL */
 	int 		signal;		/* default TEST_APP_DEFAULT_SIGNAL */
+	int		bench_concur;	/* default 100 */
+	int		bench_duration; /* default 10 */
 	struct ta_stats {
 		unsigned long long	nb_echoed; /* server */
