diff --git a/js/test-request-data.html b/js/test-request-data.html
index 704d133..11a69b0 100644
--- a/js/test-request-data.html
+++ b/js/test-request-data.html
@@ -4,7 +4,7 @@
 <html xmlns = "http://www.w3.org/1999/xhtml">
 
 <head>
-	<title>NDN Request Example</title>
+	<title>NDN Request </title>
 	<script type="text/javascript" src="java_socket_bridge.js"></script>
 	
 	<script type="text/javascript" src="CCNProtocolDTags.js"></script>
@@ -50,6 +50,10 @@
 	
 	<script type="text/javascript" src="encoding/DataUtils.js"></script>
 	
+	<script type="text/javascript" src="encoding/EncodingUtils.js"></script>
+	
+		<script type="text/javascript" src="lwNDN.js"></script>
+	
 	<script language="JavaScript" type="text/javascript" src="security/KeyManager.js"></script>
 	
 	<script language="JavaScript" type="text/javascript" src="securityLib/jsbn.js"></script>
@@ -71,54 +75,47 @@
 
 	<script type="text/javascript">
 		function run(){
-			//console.log(unescape('%04%82%02%AA%03%B2%08%85H%8EY%0C%94p%F1-%C5%E2%23lW%19%8B%0D%25%81%8D%DEBeNX%BA%0D%D0%10W%7D%BA%9F%C6%8C%2AU%BC%B8%BA%5E%F3%D1l%CDmJ%EE%C4%9D%21%0F%0Djhm%1Ah%86P%D91x%26%AC%B8%8Co%C1%CF%29.l6Mc%B4%DC%C8%D4%86%97%8F%D2%1A%7C%A2%ED%93%89%F3%E9%9D%3C%E0%D4%90%28%D4%11%A2%5D%08%EB%A4%AF%96j%15%A5s%C8%D2Jr%96q%0F%87%7F%D5%D7%B3%D3T%96%F3%16L%00%00%F2%00%01%A2%03%E2%02%85%20Ht%04Z%9F%AC%98%EB%B7%DF%AD%C4%BB%D1%AB%15%A6%E4%06SI%C6%C8%3A%84%60%84N%AB1%85%00%02%BA%B5%04%FA%C3%F9%D7%97%00%01%E2%01%DA%0A%950%81%9F0%0D%06%09%2A%86H%86%F7%0D%01%01%01%05%00%03%81%8D%000%81%89%02%81%81%00%BD%95eU%9C%17%95%C0I%A5%EFM%C9%D1%BC%8B%98%1Bf%09~%A2S%F5%D0%F5%0F%1A%1D%F9%08%ACNi%A7%97%DA%DD%2C%05%90%94Jn%84%9E%1F%BBsq%C5%3D%FD%DB%E7%80%26V%E1%D5%F4I%B8S%0D%9C%7D%A8%D6%AB%EB%D9%0E%06%12M%92%7F%2FlW%21%F1%D0%E4%9E%7Fj%11g%CA%F9%60%D9o%F5%AF%AA-%25g3wr%A9D%C8%E6%CE%B8Y%B2Z%23%1D%9E%CA%875t%FF%98%22%5C%85%3F8%EF%02%03%01%00%01%00%00%00%01%9A%06%8D%05%82%04%CA%BEnewface%00%03%E2%02%85%E0%A0%1E%099h%F9t%0C%E7%F46%1B%AB%F5%BB%05%A4%E5Z%AC%A5%E5%8Fs%ED%DE%B8%E0%13%AA%8F%00%04%D2%8E0%00%04%DA%9617%00%04%E2%CE127.0.0.1%00%04%EA%A69695%00%03%D2%D62147483647%00%00%00%00'));
-			
-			//var a = escape('%04%82%02%AA%03%B2%08%85L%90%D5X%2C%B06wHi%C5%E2%1C%03%D2M%5DB%BF%A5%8C%C8%E8g%99%EB%A7%84%25l%8EB%92%3E%AA%D8%F6%85t%FF%BB%CE%3D%B1%F4%F8%27%A7%1D.%B0%EEU%A6%06%AB%CD%1F3%C6W%93%A9%10X%28-7%7CW%D4%E4%8A3%CF%2B%E4%95%D6%B2%1D%3B%7C%E8%7C%88%7D%7B%F5%80%BC%F7%28%3A%FC%F5w%5B%8C%24%0E%0A%24%DBk%9B%8D%B5%28d%D0A%1E%BEq%0F%0Cc%DB%15%B6%26%1B%E7%E3%E3XL%00%00%F2%00%01%A2%03%E2%02%85%20Ht%04Z%9F%AC%98%EB%B7%DF%AD%C4%BB%D1%AB%15%A6%E4%06SI%C6%C8%3A%84%60%84N%AB1%85%00%02%BA%B5%04%FA%C4%C7%D3I%00%01%E2%01%DA%0A%950%81%9F0%0D%06%09%2A%86H%86%F7%0D%01%01%01%05%00%03%81%8D%000%81%89%02%81%81%00%BD%95eU%9C%17%95%C0I%A5%EFM%C9%D1%BC%8B%98%1Bf%09~%A2S%F5%D0%F5%0F%1A%1D%F9%08%ACNi%A7%97%DA%DD%2C%05%90%94Jn%84%9E%1F%BBsq%C5%3D%FD%DB%E7%80%26V%E1%D5%F4I%B8S%0D%9C%7D%A8%D6%AB%EB%D9%0E%06%12M%92%7F%2FlW%21%F1%D0%E4%9E%7Fj%11g%CA%F9%60%D9o%F5%AF%AA-%25g3wr%A9D%C8%E6%CE%B8Y%B2Z%23%1D%9E%CA%875t%FF%98%22%5C%85%3F8%EF%02%03%01%00%01%00%00%00%01%9A%06%8D%05%82%04%CA%BEnewface%00%03%E2%02%85%E0%A0%1E%099h%F9t%0C%E7%F46%1B%AB%F5%BB%05%A4%E5Z%AC%A5%E5%8Fs%ED%DE%B8%E0%13%AA%8F%00%04%D2%8E0%00%04%DA%9617%00%04%E2%CE127.0.0.1%00%04%EA%A69695%00%03%D2%D62147483647%00%00%00%00');
-			
-			//var n = a.replace("%","");
-			
-			//console.log(n);
 
-			var ContentName = document.getElementById('contentname').value;
+
+			var contentName = document.getElementById('contentname').value;
 		
 			///////////////////////////////////////
-		    createRoute('localhost', 9695);
-			
-			
-			///  /ndn/ucla.edu/apps/hydra/mainvideo
-		    //createRoute('131.179.141.15', 9695);
+			//createRoute('131.179.141.15', 9695);
 		    //createRoute('borges.metwi.ucla.edu', 9695);
+		    ///  /ndn/ucla.edu/apps/hydra/mainvideo
+		    ///////////////////////////////////////
+		
+			var connector = new lwNDN('127.0.0.1', 9695);
 		    
-			//content object
-			var co = queryPrefix( ContentName );
+			var co = connector.get( contentName );
 			
 			///////////////////////////////////////
+			//PRINT OUTPUT
+			///////////////////////////////////////
 			
 			var output ="";
 			
-			if(co==-1)
+			if(co==null)
 				output+= "NO CONTENT FOUND"
-			else if (co==-2)
-				output+= "CONTENT NAME IS EMPTY"
 			else{
 				if(co.Name!=null && co.Name.Components!=null){
 					output+= "NAME: ";
 					
 					for(var i=0;i<co.Name.Components.length;i++){
-						output+= "/"+ toString(co.Name.Components[i]);
+						output+= "/"+ DataUtils.toString(co.Name.Components[i]);
 					}
 					output+= "<br />";
 					output+= "<br />";
 				}
 	
 				if(co.Content !=null){
-					output += "CONTENT(ASCII): "+ toString(co.Content);
+					output += "CONTENT(ASCII): "+ DataUtils.toString(co.Content);
 					
 					output+= "<br />";
 					output+= "<br />";
 				}
 				if(co.Content !=null){
-					output += "CONTENT(hex): "+ toHex(co.Content);
+					output += "CONTENT(hex): "+ DataUtils.toHex(co.Content);
 					
 					output+= "<br />";
 					output+= "<br />";
@@ -126,35 +123,40 @@
 				
 				if(co.Signature !=null && co.Signature.Signature!=null){
 					
-					output += "SIGNATURE(hex): "+ toHex(co.Signature.Signature);
+					output += "SIGNATURE(hex): "+ DataUtils.toHex(co.Signature.Signature);
 					
 					output+= "<br />";
 					output+= "<br />";
 				}
 				if(co.SignedInfo !=null && co.SignedInfo.Publisher!=null && co.SignedInfo.Publisher.PublisherPublicKeyDigest!=null){
 					
-					output += "Publisher Public Key Digest(hex): "+ toHex(co.SignedInfo.Publisher.PublisherPublicKeyDigest);
+					output += "Publisher Public Key Digest(hex): "+ DataUtils.toHex(co.SignedInfo.Publisher.PublisherPublicKeyDigest);
 					
 					output+= "<br />";
 					output+= "<br />";
 				}
 				if(co.SignedInfo !=null && co.SignedInfo.Timestamp!=null){
 					
-					output += "TimeStamp(hex): "+ co.SignedInfo.Timestamp.date;
+					output += "TimeStamp: "+ co.SignedInfo.Timestamp.getJavascriptDate();
+					
+					output+= "<br />";
+					output+= "<br />";
+					
+					output += "TimeStamp (MILLISECONDS): "+ co.SignedInfo.Timestamp.msec;
 					
 					output+= "<br />";
 					output+= "<br />";
 				}
 				if(co.SignedInfo!=null && co.SignedInfo.Locator!=null && co.SignedInfo.Locator.PublicKey!=null){
 					
-					var publickey = rstr2b64(toString(co.SignedInfo.Locator.PublicKey));
-					var publickeyHex = toHex(co.SignedInfo.Locator.PublicKey).toLowerCase();
-					var publickeyString = toString(co.SignedInfo.Locator.PublicKey);
+					var publickey = rstr2b64(DataUtils.toString(co.SignedInfo.Locator.PublicKey));
+					var publickeyHex = DataUtils.toHex(co.SignedInfo.Locator.PublicKey).toLowerCase();
+					var publickeyString = DataUtils.toString(co.SignedInfo.Locator.PublicKey);
 					
-					var signature = toHex(co.Signature.Signature).toLowerCase();
+					var signature = DataUtils.toHex(co.Signature.Signature).toLowerCase();
 					
 					
-					var input = toString(co.rawSignatureData);
+					var input = DataUtils.toString(co.rawSignatureData);
 					 
 					
 					output += "DER Certificate: "+publickey ;
@@ -163,14 +165,16 @@
 					output+= "<br />";
 					
 					
-					
+
 					if(LOG>2) console.log(" ContentName + SignedInfo + Content = "+input);
 					if(LOG>2) console.log(" PublicKey = "+publickey );
 					if(LOG>2) console.log(" PublicKeyHex = "+publickeyHex );
 					if(LOG>2) console.log(" PublicKeyString = "+publickeyString );
 					
 					if(LOG>2) console.log(" Signature "+signature );
+					
 					if(LOG>2) console.log(" Signature NOW IS" );
+					
 					if(LOG>2) console.log(co.Signature.Signature);
 					
 					
@@ -192,8 +196,9 @@
 					output+= "<br />";
 					output+= "<br />";
 					
-					console.log('kp is '+kp);
-					
+					console.log('PUBLIC KEY IN HEX is ');
+					console.log(kp);
+
 					var exp = publickeyHex.slice(318,324);
 					
 					console.log('kp size is '+kp.length );
@@ -202,11 +207,37 @@
 					output+= "<br />";
 					output+= "<br />";
 					
-					console.log('exp is '+exp);
+					console.log('EXPONENT is ');
+					console.log(exp);
+
+					
+					
+					/*var c1 = hex_sha256(input);
+					var c2 = signature;
+					
+					if(LOG>4)console.log('input is ');
+					if(LOG>4)console.log(input);
+					if(LOG>4)console.log('C1 is ');
+					if(LOG>4)console.log(c1);
+					if(LOG>4)console.log('C2 is ');
+					if(LOG>4)console.log(c2);
+					var result = c1 == c2;*/
 					
 					var rsakey = new RSAKey();
+					
 					rsakey.setPublic(kp,exp);
-				    var result = rsakey.verifyString(input, signature);
+					
+					var result = rsakey.verifyByteArray(co.rawSignatureData,signature);
+				   // var result = rsakey.verifyString(input, signature);
+					
+				    
+				    
+				    console.log('PUBLIC KEY n after is ');
+					console.log(rsakey.n);
+
+					console.log('EXPONENT e after is ');
+					console.log(rsakey.e);
+					
 					
 					if(result)
 						output += 'SIGNATURE VALID';
@@ -222,7 +253,7 @@
 					output+= "<br />";
 					
 					
-					if(LOG>4) console.log('str'[1]);
+					//if(LOG>4) console.log('str'[1]);
 				}
 			}
 			
