diff --git a/nlsr.c b/nlsr.c
index 7846a1d..bd2ac39 100644
--- a/nlsr.c
+++ b/nlsr.c
@@ -755,13 +755,14 @@
 			}			
 			else if(fd == nlsr->nlsr_api_server_sock_fd)
 			{
+				printf("Setting up socket....\n");
 				client_len = sizeof(client_address);
 				client_sockfd = accept(nlsr->nlsr_api_server_sock_fd,(struct sockaddr *)&client_address, &client_len);
 				FD_SET(client_sockfd, &nlsr->readfds);
 			}
 			else
 			{   
-					
+				printf("Else...\n");		
 				ioctl(fd, FIONREAD, &nread);
 				if(nread == 0) 
 				{
@@ -771,7 +772,7 @@
 				else 
 				{
 					recv(fd, recv_buffer, 1024, 0);
-					printf("Received Data from NLSR API cleint: %s \n",recv_buffer);
+					printf("Test Received Data from NLSR API cleint: %s \n",recv_buffer);
 					char *msg=process_api_client_command(recv_buffer);
 					send(fd, msg, strlen(msg),0);
 					free(msg);
@@ -863,11 +864,13 @@
        	}
 
 	server_address.sin_family = AF_INET;
-	server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
-	server_address.sin_port = nlsr->api_port;
+	//server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
+	server_address.sin_addr.s_addr = INADDR_ANY;
+	server_address.sin_port = htons(nlsr->api_port);
 
 	server_len = sizeof(server_address);
 	bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
+	//printf("port number %d\n", ntohs(server_address.sin_port));
 	listen(server_sockfd, 100);
 	FD_ZERO(&nlsr->readfds);
 	FD_SET(server_sockfd, &nlsr->readfds);
diff --git a/nlsrc.c b/nlsrc.c
index 44ce2ad..5e35b8c 100755
--- a/nlsrc.c
+++ b/nlsrc.c
@@ -22,12 +22,15 @@
 usage(char *progname)
 {
     printf("Usage: %s [OPTIONS...]\n\
-	NLSR Api client....\n\
+	NLSR API client....\n\
 	nlsrc -s server_ip -p server_port add|del name|neighbor name_prefix [faceX] \n\
-	add/del, -- adding/deleting operation\n\
-	name/neighbor, -- Operation for name/neighbor\n\
-	name_name, -- Name prefix for name/neighbor\n\
-	faceX, -- Face Id for neighbor if third argument is neighbor\n", progname);
+	option -- description\n\n\
+	add|del -- specify whether you want to add or delete.\n\
+	name|neighbor -- specify whether you are adding a name or a neighbor.\n\
+	name_prefix -- name of the prefix for the name|neighbor.\n\
+	faceX -- face ID for neighbor if the third argument is neighbor.\n\n\
+	Examples:\n\
+	1) nlsrc -s 127.0.0.1 -p 9696 add name /ndn/memphis.edu/test \n", progname);
 
     exit(1);
 }
@@ -41,12 +44,16 @@
 	int byteSend;
 	char *server_address, *server_port;	
 
-	int command_len=0;
+	int command_len = 0;
 	int i;
 
-	if (argc < 8 )
+	if (argc < 8)
 		usage(argv[0]);
-	if ( strcmp(argv[6],"neighbor") == 0 && argc <9 )
+
+	if (strcmp(argv[6], "neighbor") == 0 && argc < 9)
+		usage(argv[0]);
+
+	if (strcmp(argv[6], "name") != 0 && strcmp(argv[6], "neighbor") != 0)
 		usage(argv[0]);
 
 	while ((result = getopt_long(argc, argv, "s:p:", longopts, 0)) != -1) 
@@ -66,14 +73,17 @@
 	char recv_buffer[1024];
 	bzero(recv_buffer,1024);
 
-	for(i=5;i<argc;i++)
-		command_len+=(strlen(argv[i])+1);
-	char *command=malloc(command_len);
-	memset(command,command_len+1,0);
-	for(i=5;i<argc;i++)
+	for(i = 5; i < argc; i++)
+		command_len += (strlen(argv[i]) + 1);
+
+	char *command = malloc(command_len);
+	memset(command, 0, command_len + 1);
+
+	for(i = 5; i < argc; i++)
 	{
-		memcpy(command+strlen(command),argv[i],strlen(argv[i]));
-		if ( i < argc-1 )
+		memcpy(command+strlen(command), argv[i], strlen(argv[i]));
+		
+		if (i < argc - 1)
 			memcpy(command+strlen(command)," ",1);	
 	}
 
@@ -82,20 +92,25 @@
 	//strcpy(address.sun_path, "/tmp/nlsr_api_server_socket");
 	address.sin_family = AF_INET;
 	address.sin_addr.s_addr = inet_addr(server_address);
-	address.sin_port = atoi(server_port);
+	address.sin_port = htons(atoi(server_port));
 
 	len = sizeof(address);
 	result = connect(sockfd, (struct sockaddr *)&address, len);
+	
 	if(result == -1) 
 	{
 		perror("oops nlsrc ");
 		exit(1);
 	}
+
 	printf("Command to send: %s \n",command);
 	byteSend=send(sockfd, command, strlen(command),0);
+
 	recv(sockfd, recv_buffer, 1024, 0);
 	printf("%s\n",recv_buffer);
+
 	free(command);
 	close(sockfd);
-	exit(0);
+
+	return 0;
 }
