diff --git a/js/ccnxProtocol/components/ccnxProtocolService.js b/js/ccnxProtocol/components/ccnxProtocolService.js
index 4690b17..b466067 100644
--- a/js/ccnxProtocol/components/ccnxProtocolService.js
+++ b/js/ccnxProtocol/components/ccnxProtocolService.js
@@ -40,6 +40,7 @@
     		var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
     		var mostRecentWindow = wm.getMostRecentWindow("navigator:browser");
     
+            var contentChannel;
 			var requestContent = function(contentListener) {
                 // Set nameString to the URI without the protocol.
                 var nameString = trimmedSpec;
@@ -76,12 +77,12 @@
 					contentListener.onReceivedContent(content, 
                         contentTypeEtc.contentType, contentTypeEtc.contentCharset);
                     
-                    // Assume that onReceivedContent sends all the content immediately and updatse
-                    //   the gURLBar if the content is for the main window.
-                    var urlBar = mostRecentWindow.gURLBar;
-                    if (urlBar && urlBar.value.trim() == trimmedSpec) {
-                        // Assume the URI is for the window.  Update the URL bar.
+                    // Load flags bit 19 "LOAD_INITIAL_DOCUMENT_URI" means the channel is
+                    //   for the main window with the URL bar.
+                    if (contentChannel.loadFlags & (1<<19)) {
+                        // Update the URL bar.
                         // Show the name without the ending sequence (unless the original URI had it).
+                        var urlBar = mostRecentWindow.gURLBar;
                         if (!uriEndsWithSequence && endsWithSequence(contentObject.name)) {
                             var nameWithoutSequence = new Name
                                 (contentObject.name.components.slice
@@ -98,7 +99,8 @@
 				ndn.expressInterest(name, new ContentClosure());
 			};
 
-			return new ContentChannel(aURI, requestContent);
+			contentChannel = new ContentChannel(aURI, requestContent);
+            return contentChannel;
 		} catch (ex) {
 			dump("CcnxProtocol.newChannel exception: " + ex + "\n");
 		}
diff --git a/js/ccnxProtocol/modules/ndn-js.jsm b/js/ccnxProtocol/modules/ndn-js.jsm
index 8134e79..39c7661 100644
--- a/js/ccnxProtocol/modules/ndn-js.jsm
+++ b/js/ccnxProtocol/modules/ndn-js.jsm
@@ -2548,10 +2548,8 @@
 		length) {
 
 
-	if ((null == blob) || (length == 0)) {
-
+	if (null == blob)
 		return;
-	}
 	
 	if(LOG>4) console.log('LENGTH OF XML_BLOB IS '+length);
 	
@@ -3159,15 +3157,10 @@
 
 BinaryXMLDecoder.prototype.decodeTypeAndVal = function() {
 	
-	/*int*/next;
-	/*int*/type = -1;
-	/*long*/val = 0;
-	/*boolean*/more = true;
+	/*int*/var type = -1;
+	/*long*/var val = 0;
+	/*boolean*/var more = true;
 
-	
-	//var savedOffset = this.offset;
-	var count = 0;
-	
 	do {
 		
 		var next = this.istream[this.offset ];
@@ -3249,14 +3242,11 @@
 	//
 	//byte [] 
 
-	bytes = this.istream.slice(this.offset, this.offset+ blobLength);
+	var bytes = this.istream.slice(this.offset, this.offset+ blobLength);
 	this.offset += blobLength;
 	
 	//int 
 	return bytes;
-	
-	count = 0;
-
 };
 
 var count =0;
