diff --git a/src/stroke/stroke.c b/src/stroke/stroke.c
index 5dae53e..b9b95a7 100644
--- a/src/stroke/stroke.c
+++ b/src/stroke/stroke.c
@@ -31,6 +31,8 @@
 #include "stroke_msg.h"
 #include "stroke_keywords.h"
 
+int quiet = 0 ;
+
 struct stroke_token {
     char *name;
     stroke_keyword_t kw;
@@ -104,7 +106,7 @@ static int send_stroke_msg (stroke_msg_t *msg)
 				*pass = ' ';
 			}
 #ifdef HAVE_GETPASS
-			pass = getpass(buffer);
+			pass = quiet?"":getpass(buffer);
 #else
 			pass = "";
 #endif
@@ -424,7 +426,7 @@ static void exit_usage(char *error)
 	printf("  Reload authority and attribute certificates:\n");
 	printf("    stroke rereadcacerts|rereadocspcerts|rereadaacerts|rereadacerts\n");
 	printf("  Reload secrets and crls:\n");
-	printf("    stroke rereadsecrets|rereadcrls|rereadall\n");
+	printf("    stroke [-b] rereadsecrets|rereadcrls|rereadall\n");
 	printf("  Purge ocsp cache entries:\n");
 	printf("    stroke purgeocsp\n");
 	printf("  Purge CRL cache entries:\n");
@@ -451,7 +453,8 @@ int main(int argc, char *argv[])
 {
 	const stroke_token_t *token;
 	int res = 0;
-
+    int argoff = 0 ;
+    
 	library_init(NULL);
 	atexit(library_deinit);
 
@@ -460,7 +463,13 @@ int main(int argc, char *argv[])
 		exit_usage(NULL);
 	}
 
-	token = in_word_set(argv[1], strlen(argv[1]));
+    if (strcmp (argv[1], "-b") == 0 && argc > 2)
+    {
+        argoff = 1 ;
+        quiet  = 1 ;
+    }
+    
+	token = in_word_set(argv[argoff+1], strlen(argv[argoff+1]));
 
 	if (token == NULL)
 	{
@@ -470,76 +479,76 @@ int main(int argc, char *argv[])
 	switch (token->kw)
 	{
 		case STROKE_ADD:
-			if (argc < 11)
+			if (argc - argoff < 11)
 			{
 				exit_usage("\"add\" needs more parameters...");
 			}
-			res = add_connection(argv[2],
-								 argv[3], argv[4],
-								 argv[5], argv[6],
-								 argv[7], argv[8]);
+			res = add_connection(argv[argoff+2],
+								 argv[argoff+3], argv[argoff+4],
+								 argv[argoff+5], argv[argoff+6],
+								 argv[argoff+7], argv[argoff+8]);
 			break;
 		case STROKE_DELETE:
 		case STROKE_DEL:
-			if (argc < 3)
+			if (argc - argoff < 3)
 			{
 				exit_usage("\"delete\" needs a connection name");
 			}
-			res = del_connection(argv[2]);
+			res = del_connection(argv[argoff+2]);
 			break;
 		case STROKE_UP:
-			if (argc < 3)
+			if (argc - argoff < 3)
 			{
 				exit_usage("\"up\" needs a connection name");
 			}
-			res = initiate_connection(argv[2]);
+			res = initiate_connection(argv[argoff+2]);
 			break;
 		case STROKE_DOWN:
-			if (argc < 3)
+			if (argc - argoff < 3)
 			{
 				exit_usage("\"down\" needs a connection name");
 			}
-			res = terminate_connection(argv[2]);
+			res = terminate_connection(argv[argoff+2]);
 			break;
 		case STROKE_DOWN_SRCIP:
-			if (argc < 3)
+			if (argc - argoff < 3)
 			{
 				exit_usage("\"down-srcip\" needs start and optional end address");
 			}
-			res = terminate_connection_srcip(argv[2], argc > 3 ? argv[3] : NULL);
+			res = terminate_connection_srcip(argv[argoff+2], argc > 3 ? argv[argoff+3] : NULL);
 			break;
 		case STROKE_REKEY:
-			if (argc < 3)
+			if (argc - argoff < 3)
 			{
 				exit_usage("\"rekey\" needs a connection name");
 			}
-			res = rekey_connection(argv[2]);
+			res = rekey_connection(argv[argoff+2]);
 			break;
 		case STROKE_ROUTE:
-			if (argc < 3)
+			if (argc - argoff < 3)
 			{
 				exit_usage("\"route\" needs a connection name");
 			}
-			res = route_connection(argv[2]);
+			res = route_connection(argv[argoff+2]);
 			break;
 		case STROKE_UNROUTE:
-			if (argc < 3)
+			if (argc - argoff < 3)
 			{
 				exit_usage("\"unroute\" needs a connection name");
 			}
-			res = unroute_connection(argv[2]);
+			res = unroute_connection(argv[argoff+2]);
 			break;
 		case STROKE_LOGLEVEL:
-			if (argc < 4)
+			if (argc - argoff < 4)
 			{
 				exit_usage("\"logtype\" needs more parameters...");
 			}
-			res = set_loglevel(argv[2], atoi(argv[3]));
+			res = set_loglevel(argv[argoff+2], atoi(argv[argoff+3]));
 			break;
 		case STROKE_STATUS:
 		case STROKE_STATUSALL:
 		case STROKE_STATUSALL_NOBLK:
-			res = show_status(token->kw, argc > 2 ? argv[2] : NULL);
+			res = show_status(token->kw, argc > 2 ? argv[argoff+2] : NULL);
 			break;
 		case STROKE_LIST_PUBKEYS:
 		case STROKE_LIST_CERTS:
@@ -554,7 +563,7 @@ int main(int argc, char *argv[])
 		case STROKE_LIST_PLUGINS:
 		case STROKE_LIST_COUNTERS:
 		case STROKE_LIST_ALL:
-			res = list(token->kw, argc > 2 && strcmp(argv[2], "--utc") == 0);
+			res = list(token->kw, argc > 2 && strcmp(argv[argoff+2], "--utc") == 0);
 			break;
 		case STROKE_REREAD_SECRETS:
 		case STROKE_REREAD_CACERTS:
@@ -576,22 +585,22 @@ int main(int argc, char *argv[])
 			{
 				exit_usage("\"exportx509\" needs a distinguished name");
 			}
-			res = export(token->kw, argv[2]);
+			res = export(token->kw, argv[argoff+2]);
 			break;
 		case STROKE_LEASES:
-			res = leases(token->kw, argc > 2 ? argv[2] : NULL,
-						 argc > 3 ? argv[3] : NULL);
+			res = leases(token->kw, argc > 2 ? argv[argoff+2] : NULL,
+						 argc > 3 ? argv[argoff+3] : NULL);
 			break;
 		case STROKE_MEMUSAGE:
 			res = memusage();
 			break;
 		case STROKE_USER_CREDS:
-			if (argc < 4)
+			if (argc - argoff < 4)
 			{
 				exit_usage("\"user-creds\" needs a connection name, "
 						   "username and optionally a password");
 			}
-			res = user_credentials(argv[2], argv[3], argc > 4 ? argv[4] : NULL);
+			res = user_credentials(argv[argoff+2], argv[argoff+3], argc > 4 ? argv[argoff+4] : NULL);
 			break;
 		default:
 			exit_usage(NULL);
