diff --git a/wsproxy/README.md b/wsproxy/README.md
index eb0cdc0..0973017 100644
--- a/wsproxy/README.md
+++ b/wsproxy/README.md
@@ -1,10 +1,24 @@
 ws-ndn-js
 =========
 
-WebSocket proxy server between NDN javascript stack and ccnd
+WebSocket proxy server between NDN javascript stack and ccnd.
 
-This proxy runs on top of 'node.js'. 'ws' package is required. It listens for WebSocket connection request on port number 9696. Once it receives a incoming connection, it issues a TCP connection to the specified 'ccnd' router (port number 9695). It then translates packet frames from WebSocket to pure TCP byte streams and vice versa.
+This proxy runs on top of 'node.js'. 'ws' and 'node-getopt' packages are required. It listens for WebSocket connection request on port number 9696. Once it receives a incoming connection, it issues a TCP connection to the specified 'ccnd' router (port number 9695). It then translates packet frames from WebSocket to pure TCP byte streams and vice versa.
 
-To run the proxy, simply use the command 'node ws-ndn.js'.
+Installation guide:
+
+1) node.js: go to http://nodejs.org/ to download and install node.js;
+2) ws package: use command 'npm install ws' or go to https://github.com/einaros/ws for more information;
+3) node-getopt package: use command 'npm install node-getopt' or go to https://npmjs.org/package/node-getopt for more information.
+
+
+To run the proxy, simply use the command 'node wsproxy-tcp.js' or 'node wsproxy-udp.js'.
+To specify remote ccnd router's hostname or ip address, use option '-c x.x.x.x'. Default is 'localhost'.
+To specify maximum number of concurrent clients, use option '-m N'. Default is 40.
+To specify the level of log info display, use option '-L x'. x=0 means no output; x=1 will log connection startup and close; x=2 will log contents of all messages that flow across the proxy. Default is 1.
+
+Example: to setup UDP connection to ccnd router 192.168.1.51 with max client number 50 and log level 2, use the command:
+
+node wsproxy-udp.js -c 192.168.1.51 -m 50 -L 2
 
 Acknowledgement: this code is extended from Junxiao's WebSocket proxy implementation (https://gist.github.com/3835425).
\ No newline at end of file
diff --git a/wsproxy/ws-ndn.js b/wsproxy/ws-ndn.js
deleted file mode 100644
index 2b67e0d..0000000
--- a/wsproxy/ws-ndn.js
+++ /dev/null
@@ -1,80 +0,0 @@
-var WebSocketServer = require('ws').Server;
-var net = require('net');
-
-var wss = new WebSocketServer({port:9696, host:'0.0.0.0'});
-
-var MaxNumOfClients = 2;
-
-wss.on('connection', function(ws) {
-	console.log('WebSocket client connection received.');
-	console.log('Number of clients now is ' + wss.clients.length);
-	
-	if (wss.clients.length > MaxNumOfClients) {
-		console.log('Max num of clients exceeded. Close WS connection now.');
-		ws.terminate();
-		return;
-	}
-	
-	var sock_ready = false;
-	var send_queue = [];
-	var sock = net.createConnection(9695);
-	
-	ws.on('message', function(message) {
-		if (typeof message == 'string')
-			console.log("Message from clinet: " + message);
-		else if (typeof message == 'object') {
-			var bytesView = new Uint8Array(message);
-
-			var logMsg = 'Byte array from client: ';
-			for (var i = 0; i < bytesView.length; i++)
-				logMsg += String.fromCharCode(bytesView[i]);
-			console.log(logMsg);
-			
-			if (sock_ready) {
-				sock.write(bytesView.buffer);
-				console.log('sock.write() returned.');
-			} else {
-				send_queue.push(message);
-			}
-		}
-	});
-	
-	ws.on('close', function() {
-		console.log('WebSocket connection closed.');
-		sock.end();
-	});
-	
-	sock.on('connect', function() {
-		while (send_queue.length > 0) {
-			var message = send_queue.shift();
-			sock.write(message);
-		}
-		sock_ready = true;
-		console.log('ccnd socket connection ready.');
-	});
-	
-	sock.on('data', function(data) {
-		if (typeof data == 'object') {
-			var bytesView = new Uint8Array(data);
-			
-			console.log('Byte array from server: ');
-			var logMsg = "";
-			for (var i = 0; i < bytesView.length; i++)
-				logMsg += String.fromCharCode(bytesView[i]);
-			console.log(logMsg);
-			
-			ws.send(bytesView.buffer, {binary: true, mask: false});
-			console.log('ws.send() returned.');
-		}
-	});
-	
-	sock.on('end', function() {
-		console.log('TCP connection terminated by ccnd. Shut down WS connection to client.');
-		ws.terminate();
-	});
-	
-	sock.on('error', function() {
-		console.log('Error on TCP connection to ccnd. Shut down WS connection to client.');
-		ws.terminate();
-	});
-});
diff --git a/wsproxy/wsproxy-udp.js b/wsproxy/wsproxy-udp.js
index bec9421..9b79ac2 100644
--- a/wsproxy/wsproxy-udp.js
+++ b/wsproxy/wsproxy-udp.js
@@ -1,18 +1,37 @@
+/* 
+ * @author: Wentao Shang
+ * See COPYING for copyright and distribution information.
+ * Implement WebSocket proxy between ccnd and javascript stack.
+ */
+
 var WebSocketServer = require('ws').Server;
 var dgram = require('dgram');
 
-var ccndhost = 'localhost';
+var opt = require('node-getopt').create([
+  ['c' , 'ccnd=ARG', 'host name or ip of ccnd router'],
+  ['m' , 'maxclient=ARG', 'maximum number of concurrent client'],
+  ['L' , 'LOG=ARG', 'level of log message display'],
+  ['h' , 'help', 'display this help']
+])              // create Getopt instance
+.bindHelp()     // bind option 'help' to default action
+.parseSystem(); // parse command line
 
-var wss = new WebSocketServer({port:9696, host:ccndhost});
+var ccndhost = opt.options.ccnd || 'localhost';
 
-var MaxNumOfClients = 2;
+var wss = new WebSocketServer({port:9696});
+
+var MaxNumOfClients = opt.options.maxclient || 40;
+
+var LOG = opt.options.LOG || 1;
+
+if (LOG > 0) console.log('WebSocketServer started...');
 
 wss.on('connection', function(ws) {
-	console.log('wss.onconnection: WebSocket client connection received.');
-	console.log('wss.onconnection: Number of clients now is ' + wss.clients.length);
+	if (LOG > 0) console.log('wss.onconnection: WebSocket client connection received.');
+	if (LOG > 0) console.log('wss.onconnection: Number of clients now is ' + wss.clients.length);
 	
 	if (wss.clients.length > MaxNumOfClients) {
-		console.log('wss.onconnection: Max num of clients exceeded. Close WS connection now.');
+		if (LOG > 0) console.log('wss.onconnection: Max num of clients exceeded. Close WS connection now.');
 		ws.terminate();
 		return;
 	}
@@ -43,30 +62,32 @@
 		var hb = new Buffer(1);
 		hb[0] = 0x21;
 		udp.send(hb, 0, 1, 9695, ccndhost, null);
-		//console.log('UDP heartbeat fired at ccnd.');
+		if (LOG > 1) console.log('UDP heartbeat fired at ccnd.');
 	}, 
 	8000 // 8000 ms delay
 	);
 	
 	ws.on('message', function(message) {
-		if (typeof message == 'string')
-			console.log("ws.onmessage: Message from clinet: " + message);
+		if (typeof message == 'string') {
+			if (LOG > 2) console.log("ws.onmessage: Message from clinet: " + message);
+		}
 		else if (typeof message == 'object') {
 			// From JS array to Buffer
 			var buffer = new Buffer(message);
 
-			var logMsg = 'ws.onmessage: Byte array from client: ';
-			for (var i = 0; i < buffer.length; i++)
-				logMsg += String.fromCharCode(buffer[i]);
-			console.log(logMsg);
+			if (LOG > 2) {
+				var logMsg = 'ws.onmessage: Byte array from client: ';
+				for (var i = 0; i < buffer.length; i++)
+					logMsg += String.fromCharCode(buffer[i]);
+				console.log(logMsg);
+			}
 			
 			udp.send(buffer, 0, buffer.length, 9695, ccndhost, null);
-			console.log('ws.onmessage: udp.send() returned.');
 		}
 	});
 	
 	ws.on('close', function() {
-		console.log('ws.onclose: WebSocket connection closed. Close UDP connection to ccnd and stop "heartbeat" timer.');
+		if (LOG > 0) console.log('ws.onclose: WebSocket connection closed. Close UDP connection to ccnd and stop "heartbeat" timer.');
 		clearInterval(timerID);
 		udp.close();
 		udp = null;
@@ -77,15 +98,16 @@
 			// From Buffer to ArrayBuffer
 			var bytesView = new Uint8Array(msg);
 			
-			console.log('udp.onmessage: Byte array from server: ');
-			console.log('udp.onmessage: bytesView.length ' + bytesView.length);
-			var logMsg = "";
-			for (var i = 0; i < bytesView.length; i++)
-				logMsg += String.fromCharCode(bytesView[i]);
-			console.log(logMsg);
+			if (LOG > 2) {
+				console.log('udp.onmessage: Byte array from server: ');
+				console.log('udp.onmessage: bytesView.length ' + bytesView.length);
+				var logMsg = "";
+				for (var i = 0; i < bytesView.length; i++)
+					logMsg += String.fromCharCode(bytesView[i]);
+				console.log(logMsg);
+			}
 			
 			ws.send(bytesView.buffer, {binary: true, mask: false});
-			console.log('udp.onmessage: ws.send() returned.');
 		}
 	});
 	
@@ -97,13 +119,13 @@
 	// will check the 'readyState' before closing, therefore avoids 'close' event loop.
 	//     --Wentao
 	udp.on('close', function() {
-		console.log('udp.onclose: UDP connection to ccnd terminated. Shut down WS connection to client and stop "heartbeat" timer.');
+		if (LOG > 0) console.log('udp.onclose: UDP connection to ccnd terminated. Shut down WS connection to client and stop "heartbeat" timer.');
 		clearInterval(timerID);
 		ws.terminate();
 	});
 	
 	udp.on('error', function() {
-		console.log('udp.onerror: Error on UDP connection to ccnd. Shut down WS connection to client and stop "heartbeat" timer.');
+		if (LOG > 0) console.log('udp.onerror: Error on UDP connection to ccnd. Shut down WS connection to client and stop "heartbeat" timer.');
 		clearInterval(timerID);
 		ws.terminate();
 	});
