diff -r d163c8917af7 ii.c
--- a/ii.c	Mon Oct 31 21:35:12 2011 +0100
+++ b/ii.c	Fri Jun 15 11:43:59 2012 -0400
@@ -457,7 +457,7 @@
 }
 
 int main(int argc, char *argv[]) {
-	int i;
+	int i, keyidx = -1;
 	unsigned short port = SERVER_PORT;
 	struct passwd *spw = getpwuid(getuid());
 	char *key = NULL, *fullname = NULL;
@@ -477,7 +477,7 @@
 			case 's': host = argv[++i]; break;
 			case 'p': port = strtol(argv[++i], NULL, 10); break;
 			case 'n': snprintf(nick,sizeof(nick),"%s", argv[++i]); break;
-			case 'k': key = argv[++i]; break;
+			case 'k': keyidx = ++i; break;
 			case 'f': fullname = argv[++i]; break;
 			default: usage(); break;
 		}
@@ -490,7 +490,20 @@
 	create_dirtree(path);
 
 	add_channel(""); /* master channel */
+	/* mask key in argv */
+	if(0 <= keyidx) {
+		size_t keylen = strlen(argv[keyidx]);
+		key = calloc(keylen + 1, sizeof (char));
+		if(!key) {
+			fputs("ii: failed to allocate space to copy key\n", 
+stderr);
+			exit(EXIT_FAILURE);
+		}
+		memcpy(key, argv[keyidx], keylen);
+		memset(argv[keyidx], ' ', keylen);
+	}
 	login(key, fullname);
+	free(key);
 	run();
 
 	return EXIT_SUCCESS;
