diff --git a/ipsvd/tcpsvd.c b/ipsvd/tcpsvd.c
index 9a0a348..df98216 100644
--- a/ipsvd/tcpsvd.c
+++ b/ipsvd/tcpsvd.c
@@ -1,15 +1,20 @@
-/*
-# /usr/bin/tcpsvd -v 0 1234 true
-tcpsvd: info: pid 24916 from 127.0.0.1
-tcpsvd: info: start 24916 localhost:127.0.0.1 ::127.0.0.1:47905
-tcpsvd: info: pid 24918 from 127.0.0.1
-tcpsvd: info: start 24918 localhost:127.0.0.1 ::127.0.0.1:47906
-# ./busybox tcpsvd -v 0 1234 true
-tcpsvd: info: pid 24924 from 127.0.0.1
-tcpsvd: info: start 24924 localhost:1234:127.0.0.1:1234 ::127.0.0.1:47908
-tcpsvd: info: pid 24926 from 127.0.0.1
-tcpsvd: info: start 24926 localhost:1234:127.0.0.1:1234 ::127.0.0.1:47909
-*/
+/* Based on ipsvd utilities written by Gerrit Pape <pape@smarden.org>
+ * which are released into public domain by the author.
+ * Homepage: http://smarden.sunsite.dk/ipsvd/
+ *
+ * Copyright (C) 2007 by Denis Vlasenko.
+ *
+ * Licensed under GPLv2, see file LICENSE in this tarball for details.
+ */
+
+/* Based on ipsvd ipsvd-0.12.1. This tcpsvd accepts all options
+ * which are supported by one from ipsvd-0.12.1, but not all are
+ * functional. See help text at the end of this file for details.
+ *
+ * Code inside "#ifdef SSLSVD" is for sslsvd and is currently unused.
+ * Code inside #if 0" is parts of original tcpsvd which are not implemented
+ * for busyboxed version.
+ */
 
 #include "busybox.h"
 #include "ipsvd_perhost.h"
@@ -297,15 +302,15 @@
 	if (!max_per_host)
 		remote_ip = xmalloc_sockaddr2dotted_noport(&sock_adr.sa, sizeof(sock_adr));
 	/* else it is already done */
-	
+
 	remote_port = get_nport(&sock_adr.sa);
 	remote_port = ntohs(remote_port);
-	
+
 	if (verbose) {
 		pid = getpid();
 		printf("%s: info: pid %d from %s\n", applet_name, pid, remote_ip);
 	}
-	
+
 	if (need_addresses && (option_mask32 & OPT_h)) {
 		remote_hostname = xmalloc_sockaddr2host(&sock_adr.sa, sizeof(sock_adr));
 		if (!remote_hostname) {
@@ -313,7 +318,7 @@
 			remote_hostname = (char*)"";
 		}
 	}
-	
+
 	sockadr_size = sizeof(sock_adr);
 	/* Errors ignored (I'm not paranoid enough to imagine kernel
 	 * which doesn't know local ip) */
@@ -329,7 +334,7 @@
 				bb_error_msg_and_die("cannot look up local hostname for %s", local_ip);
 		}
 	}
-	
+
 	if (!(option_mask32 & OPT_E)) {
 		/* setup ucspi env */
 		xsetenv("PROTO", "TCP");
@@ -346,7 +351,7 @@
 		if (cur_per_host > 0)
 			xsetenv("TCPCONCURRENCY", utoa(cur_per_host));
 	}
-	
+
 #if 0
 	if (instructs) {
 		ac = ipsvd_check(iscdb, &inst, &match, (char*)instructs,
@@ -356,11 +361,11 @@
 	} else
 		ac = IPSVD_DEFAULT;
 #endif
-	
+
 	if (max_per_host && verbose)
 		printf("%s: info: concurrency %u %s %u/%u\n",
 			applet_name, pid, remote_ip, cur_per_host, max_per_host);
-	
+
 	if (verbose) {
 		printf("%s: info: start %u %s:%s :%s:%s:%u\n",
 			applet_name, pid,
@@ -445,6 +450,8 @@
     host either is a hostname, or a dotted-decimal IP address,
     or 0. If host is 0, tcpsvd accepts connections to any local
     IP address.
+    * busybox accepts IPv6 addresses and host:port pairs too
+      In this case second parameter is ignored
 port
     tcpsvd accepts connections to host:port. port may be a name
     from /etc/services or a number.
@@ -453,14 +460,16 @@
     tcpsvd normally runs prog, with file descriptor 0 reading from
     the network, and file descriptor 1 writing to the network.
     By default it also sets up TCP-related environment variables,
-    see tcp-environ(5) 
+    see tcp-environ(5)
 -i dir
     read instructions for handling new connections from the instructions
-    directory dir. See ipsvd-instruct(5) for details. 
+    directory dir. See ipsvd-instruct(5) for details.
+    * ignored by busyboxed version
 -x cdb
     read instructions for handling new connections from the constant database
     cdb. The constant database normally is created from an instructions
-    directory by running ipsvd-cdb(8). 
+    directory by running ipsvd-cdb(8).
+    * ignored by busyboxed version
 -t sec
     timeout. This option only takes effect if the -i option is given.
     While checking the instructions directory, check the time of last access
@@ -468,47 +477,50 @@
     and remove the file if it wasn't accessed within the last sec seconds;
     tcpsvd does not discard or remove a file if the user's write permission
     is not set, for those files the timeout is disabled. Default is 0,
-    which means that the timeout is disabled. 
+    which means that the timeout is disabled.
+    * ignored by busyboxed version
 -l name
     local hostname. Do not look up the local hostname in DNS, but use name
     as hostname. This option must be set if tcpsvd listens on port 53
-    to avoid loops. 
+    to avoid loops.
 -u user[:group]
     drop permissions. Switch user ID to user's UID, and group ID to user's
     primary GID after creating and binding to the socket. If user is followed
     by a colon and a group name, the group ID is switched to the GID of group
-    instead. All supplementary groups are removed. 
+    instead. All supplementary groups are removed.
 -c n
     concurrency. Handle up to n connections simultaneously. Default is 30.
     If there are n connections active, tcpsvd defers acceptance of a new
-    connection until an active connection is closed. 
+    connection until an active connection is closed.
 -C n[:msg]
     per host concurrency. Allow only up to n connections from the same IP
-    address simultaneously. If there are n active connections from one IP	
+    address simultaneously. If there are n active connections from one IP
     address, new incoming connections from this IP address are closed
-    immediately. If n is followed by :msg, the message msg is written	
+    immediately. If n is followed by :msg, the message msg is written
     to the client if possible, before closing the connection. By default
     msg is empty. See ipsvd-instruct(5) for supported escape sequences in msg.
 
     For each accepted connection, the current per host concurrency is
     available through the environment variable TCPCONCURRENCY. n and msg
     can be overwritten by ipsvd(7) instructions, see ipsvd-instruct(5).
-    By default tcpsvd doesn't keep track of connections. 
+    By default tcpsvd doesn't keep track of connections.
 -h
-    Look up the client's hostname in DNS. 
+    Look up the client's hostname in DNS.
 -p
     paranoid. After looking up the client's hostname in DNS, look up the IP
     addresses in DNS for that hostname, and forget about the hostname
     if none of the addresses match the client's IP address. You should
     set this option if you use hostname based instructions. The -p option
-    implies the -h option. 
+    implies the -h option.
+    * ignored by busyboxed version
 -b n
     backlog. Allow a backlog of approximately n TCP SYNs. On some systems n
-    is silently limited. Default is 20. 
+    is silently limited. Default is 20.
 -E
-    no special environment. Do not set up TCP-related environment variables. 
+    no special environment. Do not set up TCP-related environment variables.
 -v
-    verbose. Print verbose messsages to standard output. 
+    verbose. Print verbose messsages to standard output.
 -vv
-    more verbose. Print more verbose messages to standard output. 
+    more verbose. Print more verbose messages to standard output.
+    * no difference between -v and -vv in busyboxed version
 */
