diff --git a/js/examples/ndnping/ndn-ping.html b/js/examples/ndnping/ndn-ping.html
new file mode 100644
index 0000000..9327c09
--- /dev/null
+++ b/js/examples/ndnping/ndn-ping.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<!-- 
+	See COPYING for copyright and distribution information.
+-->
+<html>
+<head>
+<title>NDN Ping</title>
+
+<!--
+	ndn-js.js
+	is a concatented, compressed version of the library,
+	built in tools/build
+-->
+<script type="text/javascript" src="ndn-js.js"></script>
+<script type="text/javascript" src="ndn-ping.js"></script>
+
+</head>
+
+<body>
+	
+	<h1>NDN Ping example</h1>
+	
+	Using ping responder on NDN testbed, which responds to Interests in <em>
+	/&lt;topo-prefix&gt;/ping/&lt;random-number&gt;</em>.
+	
+	<h2>NDN Testbed Status</h2>
+	<p>Testbed content ping results retrieved using <a href="http://github.com/remap/ndn-js">NDN.js</a>, a javascript client library for NDN.</p>
+	<table border="0" width="40%" id="pingreport" style="margin-left:20px">
+	</table>
+	<p>&nbsp;</p>
+
+
+</body>
+</html>
diff --git a/js/examples/ndnping/ndn-ping.js b/js/examples/ndnping/ndn-ping.js
new file mode 100644
index 0000000..2aef361
--- /dev/null
+++ b/js/examples/ndnping/ndn-ping.js
@@ -0,0 +1,68 @@
+/* 
+	NDN Ping example
+	
+	Using ping responder on NDN testbed, which responds to Interests in
+	/<topo-prefix>/ping/<random-number>
+	
+	Jeff Burke
+	jburke@remap.ucla.edu
+	
+	See COPYING for copyright and distribution information.
+
+*/
+
+		// One of NDN project default hubs
+		hostip="A.ws.ndn.ucla.edu";
+
+        var AsyncGetClosure = function AsyncGetClosure(T0) {
+        	this.T0 = T0;
+			Closure.call(this);
+		};
+		
+		AsyncGetClosure.prototype.upcall = function(kind, upcallInfo) {
+			if (kind == Closure.UPCALL_FINAL) {
+				// Do nothing.
+			} else if (kind == Closure.UPCALL_INTEREST_TIMED_OUT) {
+		
+				nameStr = upcallInfo.interest.name.getName().split("/").slice(0,-2).join("/");
+				document.getElementById('pingreport').innerHTML += '<tr><td width="65%">' + nameStr + ' </td><td align="right">timeout</td></tr>' ;
+			} else if (kind == Closure.UPCALL_CONTENT) {
+				var T1 = new Date();
+				var content = upcallInfo.contentObject;
+				nameStr = content.name.getName().split("/").slice(0,-2).join("/");
+				strContent = DataUtils.toString(content.content);
+				if (strContent=="ping ack") {
+					document.getElementById('pingreport').innerHTML += '<tr><td width="65%">' + nameStr + ' </td><td align="right">' + (T1-this.T0) + ' ms</td></tr>' ;
+				} else {
+					console.log("Unknown content received.");
+				};
+			}
+			return Closure.RESULT_OK;
+		};
+		
+		function ping(name) {
+			pingname = name + "/ping/" + Math.floor(Math.random()*100000);
+			ndn.expressInterest(new Name(pingname), new AsyncGetClosure( new Date() ));
+		};
+	
+	 	function dopings() {
+     		ping("/ndn/arizona.edu");
+     		ping("/ndn/caida.org");
+     		ping("/ndn/colostate.edu/netsec")
+     		ping("/ndn/memphis.edu/netlab")
+     		ping("/ndn/neu.edu/northpole")
+     		ping("/ndn/parc.com");
+     		ping("/ndn/pku.edu");
+     		ping("/ndn/uci.edu");
+     		ping("/ndn/ucla.edu");
+     		ping("/ndn/ucla.edu/apps");    		
+     		ping("/ndn/uiuc.edu");
+     		ping("/ndn/wustl.edu");
+     		
+		};
+		
+		openHandle = function() { dopings(); };
+		var ndn = new NDN({host:hostip, onopen:openHandle});
+		var T0 = 0;
+        ndn.transport.connectWebSocket(ndn);
+		
