diff --git a/js/PublisherPublicKeyDigest.js b/js/PublisherPublicKeyDigest.js
index 30f9549..b85e26b 100644
--- a/js/PublisherPublicKeyDigest.js
+++ b/js/PublisherPublicKeyDigest.js
@@ -28,11 +28,10 @@
 		//TODO check if the length of the PublisherPublicKeyDigest is correct ( Security reason)
 
 		if (this.publisherPublicKeyDigest.length != this.PUBLISHER_ID_LEN) {
+			if (LOG > 0)
+                console.log('LENGTH OF PUBLISHER ID IS WRONG! Expected ' + this.PUBLISHER_ID_LEN + ", got " + this.publisherPublicKeyDigest.length);
 			
-			console.log('LENGTH OF PUBLISHER ID IS WRONG! Expected ' + this.PUBLISHER_ID_LEN + ", got " + this.publisherPublicKeyDigest.length);
-			
-			//this.publisherPublicKeyDigest = new PublisherPublicKeyDigest(this.PublisherPublicKeyDigest).PublisherKeyDigest;
-		
+			//this.publisherPublicKeyDigest = new PublisherPublicKeyDigest(this.PublisherPublicKeyDigest).PublisherKeyDigest;		
 		}
 	};
 
diff --git a/js/ccnxProtocol/components/ccnxProtocolService.js b/js/ccnxProtocol/components/ccnxProtocolService.js
index 42dd1f6..b77d5c6 100644
--- a/js/ccnxProtocol/components/ccnxProtocolService.js
+++ b/js/ccnxProtocol/components/ccnxProtocolService.js
@@ -34,6 +34,10 @@
 	newChannel: function(aURI)
 	{
 		try {
+            // Save the mostRecentWindow from the moment of newChannel.
+    		var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
+    		var mostRecentWindow = wm.getMostRecentWindow("navigator:browser");
+    
 			var requestContent = function(contentListener) {
 				var name = aURI.spec.split(":")[1];
 			    // 131.179.141.18 is lioncub.metwi.ucla.edu .
@@ -50,40 +54,22 @@
                         return Closure.RESULT_ERR;
                         
                     var contentObject = upcallInfo.contentObject;
+                    if (contentObject.content == null) {
+                        dump("CcnxProtocol.newChannel: contentObject.content is null\n");
+                        return Closure.RESULT_ERR;
+                    }
                         
-					// Set up defaults.
-					var content = "";
-					var contentType = "text/html";
-					var contentCharset = "utf-8";
-
-					if (contentObject.content != null) {
-						content = DataUtils.toString(contentObject.content);
-
-						// TODO: Should look at the returned Name to get contentType. For now,
-						//   just look for a file extension in the original name.
-						var nameLowerCase = name.toLowerCase();
-						if (nameLowerCase.indexOf(".gif") >= 0) {
-							contentType = "image/gif";
-							contentCharset = "ISO-8859-1";
-						}
-						else if (nameLowerCase.indexOf(".jpg") >= 0 ||
-								 nameLowerCase.indexOf(".jpeg") >= 0) {
-							contentType = "image/jpeg";
-							contentCharset = "ISO-8859-1";
-						}
-						else if (nameLowerCase.indexOf(".png") >= 0) {
-							contentType = "image/png";
-							contentCharset = "ISO-8859-1";
-						}
-						else if (nameLowerCase.indexOf(".bmp") >= 0) {
-							contentType = "image/bmp";
-							contentCharset = "ISO-8859-1";
-						}
-						else if (nameLowerCase.indexOf(".css") >= 0)
-							contentType = "text/css";
-					}
-						
-					contentListener.onReceivedContent(content, contentType, contentCharset);
+                    var content = DataUtils.toString(contentObject.content);
+					// TODO: Should look at the returned Name to get contentType. For now,
+					//   just look at the original name.
+                    var contentTypeAndCharset = getContentTypeAndCharset(name);						
+					contentListener.onReceivedContent(content, 
+                        contentTypeAndCharset.contentType, contentTypeAndCharset.contentCharset);
+                    
+                    // Assume that onReceivedContent sends all the content immediately and that
+                    //   the URLBar is updated if the content is for the main window.
+                    var urlBar = mostRecentWindow.gURLBar;
+                    
                     return Closure.RESULT_OK;
 				};
 			
@@ -107,4 +93,37 @@
 else
 	var NSGetModule = XPCOMUtils.generateNSGetModule([CcnxProtocol]);
  
+/*
+ * Based on name, return and object with properties contentType and charset.
+ */
+function getContentTypeAndCharset(name) {
+    // Set up defaults.
+    var contentType = "text/html";
+	var charset = "utf-8";
 
+	var nameLowerCase = name.toLowerCase();
+	if (nameLowerCase.indexOf(".gif") >= 0) {
+	    contentType = "image/gif";
+		charset = "ISO-8859-1";
+	}
+	else if (nameLowerCase.indexOf(".jpg") >= 0 ||
+			 nameLowerCase.indexOf(".jpeg") >= 0) {
+		contentType = "image/jpeg";
+		charset = "ISO-8859-1";
+	}
+	else if (nameLowerCase.indexOf(".png") >= 0) {
+		contentType = "image/png";
+		charset = "ISO-8859-1";
+	}
+	else if (nameLowerCase.indexOf(".bmp") >= 0) {
+		contentType = "image/bmp";
+		charset = "ISO-8859-1";
+	}
+	else if (nameLowerCase.indexOf(".css") >= 0)
+		contentType = "text/css";
+    
+    return {
+        contentType: contentType,
+        charset: charset
+    };
+}
