diff --git a/js/ContentName.js b/js/ContentName.js
index 74ce00e..59a9b94 100644
--- a/js/ContentName.js
+++ b/js/ContentName.js
@@ -4,20 +4,20 @@
  */
  
 
-var ContentName = function ContentName(_Components){
+var ContentName = function ContentName(_components){
 
-	if( typeof _Components == 'string') {
+	if( typeof _components == 'string') {
 		
-		if(LOG>3)console.log('Content Name String '+_Components);
-		this.Components = ContentName.makeBlob(ContentName.createNameArray(_Components));
+		if(LOG>3)console.log('Content Name String '+_components);
+		this.Components = ContentName.makeBlob(ContentName.createNameArray(_components));
 	}
-	else if(typeof _Components === 'object' && _Components instanceof Array ){
+	else if(typeof _components === 'object' && _components instanceof Array ){
 		
-		if(LOG>4)console.log('Content Name Array '+_Components);
-		this.Components = ContentName.makeBlob(_Components);
+		if(LOG>4)console.log('Content Name Array '+_components);
+		this.Components = ContentName.makeBlob(_components);
 
 	}
-	else if(_Components==null){
+	else if(_components==null){
 		this.Components =[];
 	}
 	else{
diff --git a/js/ContentObject.js b/js/ContentObject.js
index 0d58ba6..5ac4d28 100644
--- a/js/ContentObject.js
+++ b/js/ContentObject.js
@@ -2,33 +2,33 @@
  * @author: ucla-cs
  * This class represents ContentObject Objects
  */
-var ContentObject = function ContentObject(_Name,_SignedInfo,_Content,_Signature){
+var ContentObject = function ContentObject(_name,_signedInfo,_content,_signature){
 	
 	
-	if (typeof _Name === 'string'){
-		this.Name = new ContentName(_Name);
+	if (typeof _name === 'string'){
+		this.name = new ContentName(_name);
 	}
 	else{
-		//TODO Check the class of _Name
-		this.Name = _Name;
+		//TODO Check the class of _name
+		this.name = _name;
 	}
-	this.SignedInfo = _SignedInfo;
-	this.Content=_Content;
-	this.Signature = _Signature;
+	this.SignedInfo = _signedInfo;
+	this.content=_content;
+	this.Signature = _signature;
 
 	
-	this.StartSIG = null;
-	this.EndSIG = null;
+	this.startSIG = null;
+	this.endSIG = null;
 	
-	this.StartSignedInfo = null;
-	this.EndContent = null;
+	this.startSignedInfo = null;
+	this.endContent = null;
 	
 	this.rawSignatureData = null;
 };
 
 ContentObject.prototype.sign = function(){
 
-	var n1 = this.encodeObject(this.Name);
+	var n1 = this.encodeObject(this.name);
 	var n2 = this.encodeObject(this.SignedInfo);
 	var n3 = this.encodeContent();
 	
@@ -78,7 +78,7 @@
 ContentObject.prototype.encodeContent = function encodeContent(obj){
 	var enc = new BinaryXMLEncoder();
 	 
-	enc.writeElement(CCNProtocolDTags.Content, this.Content);
+	enc.writeElement(CCNProtocolDTags.Content, this.content);
 
 	var num = enc.getReducedOstream();
 
@@ -89,12 +89,12 @@
 
 ContentObject.prototype.saveRawData = function(bytes){
 	
-	var sigBits = bytes.slice(this.StartSIG, this.EndSIG );
+	var sigBits = bytes.slice(this.startSIG, this.endSIG );
 
 	this.rawSignatureData = sigBits;
 };
 
-ContentObject.prototype.decode = function(/*XMLDecoder*/ decoder) {
+ContentObject.prototype.from_ccnb = function(/*XMLDecoder*/ decoder) {
 
 	// TODO VALIDATE THAT ALL FIELDS EXCEPT SIGNATURE ARE PRESENT
 
@@ -106,14 +106,14 @@
 			this.Signature.decode(decoder);
 		}
 		
-		//this.EndSIG = decoder.offset;
+		//this.endSIG = decoder.offset;
 
-		this.StartSIG = decoder.offset;
+		this.startSIG = decoder.offset;
 
-		this.Name = new ContentName();
-		this.Name.decode(decoder);
+		this.name = new ContentName();
+		this.name.decode(decoder);
 		
-		//this.StartSignedInfo = decoder.offset;
+		//this.startSignedInfo = decoder.offset;
 	
 		
 		if( decoder.peekStartElement(CCNProtocolDTags.SignedInfo) ){
@@ -121,11 +121,11 @@
 			this.SignedInfo.decode(decoder);
 		}
 		
-		this.Content = decoder.readBinaryElement(CCNProtocolDTags.Content);
+		this.content = decoder.readBinaryElement(CCNProtocolDTags.Content);
 
 		
-		//this.EndContent = decoder.offset;
-		this.EndSIG = decoder.offset;
+		//this.endContent = decoder.offset;
+		this.endSIG = decoder.offset;
 
 		
 		decoder.readEndElement();
@@ -133,9 +133,9 @@
 		this.saveRawData(decoder.istream);
 };
 
-ContentObject.prototype.encode = function(/*XMLEncoder*/ encoder)  {
+ContentObject.prototype.to_ccnb = function(/*XMLEncoder*/ encoder)  {
 
-	//TODO verify Name, SignedInfo and Signature is present
+	//TODO verify name, SignedInfo and Signature is present
 
 
 	encoder.writeStartElement(this.getElementLabel());
@@ -146,23 +146,23 @@
 	if(null!=this.Signature) this.Signature.encode(encoder);
 	
 	
-	this.StartSIG = encoder.offset;
+	this.startSIG = encoder.offset;
 	
 
-	if(null!=this.Name) this.Name.encode(encoder);
+	if(null!=this.name) this.name.encode(encoder);
 	
-	//this.EndSIG = encoder.offset;
-	//this.StartSignedInfo = encoder.offset;
+	//this.endSIG = encoder.offset;
+	//this.startSignedInfo = encoder.offset;
 	
 	
 	if(null!=this.SignedInfo) this.SignedInfo.encode(encoder);
 
-	encoder.writeElement(CCNProtocolDTags.Content, this.Content);
+	encoder.writeElement(CCNProtocolDTags.Content, this.content);
 
 	
-	this.EndSIG = encoder.offset;
+	this.endSIG = encoder.offset;
 	
-	//this.EndContent = encoder.offset;
+	//this.endContent = encoder.offset;
 	
 
 	encoder.writeEndElement();
diff --git a/js/Interest.js b/js/Interest.js
index ab20de1..46303b1 100644
--- a/js/Interest.js
+++ b/js/Interest.js
@@ -3,20 +3,20 @@
  * This class represents Interest Objects
  */
 
-var Interest = function Interest(_Name,_FaceInstance,_MinSuffixComponents,_MaxSuffixComponents,_PublisherID, _Exclude, _ChildSelector,_AnswerOriginKind,_Scope,_InterestLifetime,_Nonce){
+var Interest = function Interest(_name,_faceInstance,_minSuffixComponents,_maxSuffixComponents,_publisherPublicKeyDigest, _exclude, _childSelector,_answerOriginKind,_scope,_interestLifetime,_nonce){
 		
-	this.Name = _Name;
-	this.FaceInstance = _FaceInstance;
-	this.MaxSuffixComponents = _MaxSuffixComponents;
-	this.MinSuffixComponents = _MinSuffixComponents;
+	this.name = _name;
+	this.faceInstance = _faceInstance;
+	this.maxSuffixComponents = _maxSuffixComponents;
+	this.minSuffixComponents = _minSuffixComponents;
 	
-	this.PublisherID = _PublisherID;
-	this.Exclude = _Exclude;
-	this.ChildSelector = _ChildSelector;
-	this.AnswerOriginKind = _AnswerOriginKind;
-	this.Scope = _Scope;
-	this.InterestLifetime = null;		// For now we don't have the ability to set an interest lifetime
-	this.Nonce = _Nonce;
+	this.publisherPublicKeyDigest = _publisherPublicKeyDigest;
+	this.exclude = _exclude;
+	this.childSelector = _childSelector;
+	this.answerOriginKind = _answerOriginKind;
+	this.scope = _scope;
+	this.interestLifetime = null;		// For now we don't have the ability to set an interest lifetime
+	this.nonce = _nonce;
 	
 
 	this.RECURSIVE_POSTFIX = "*";
@@ -26,99 +26,111 @@
 	this.ANSWER_CONTENT_STORE = 1;
 	this.ANSWER_GENERATED = 2;
 	this.ANSWER_STALE = 4;		// Stale answer OK
-	this.MARK_STALE = 16;		// Must have Scope 0.  Michael calls this a "hack"
+	this.MARK_STALE = 16;		// Must have scope 0.  Michael calls this a "hack"
 
 	this.DEFAULT_ANSWER_ORIGIN_KIND = this.ANSWER_CONTENT_STORE | this.ANSWER_GENERATED;
 
 };
 
-Interest.prototype.decode = function(/*XMLDecoder*/ decoder) {
+Interest.prototype.from_ccnb = function(/*XMLDecoder*/ decoder) {
 
 		decoder.readStartElement(CCNProtocolDTags.Interest);
 
-		this.Name = new ContentName();
-		this.Name.decode(decoder);
+		this.name = new ContentName();
+		this.name.decode(decoder);
 
 		if (decoder.peekStartElement(CCNProtocolDTags.MinSuffixComponents)) {
-			this.MinSuffixComponents = decoder.readIntegerElement(CCNProtocolDTags.MinSuffixComponents);
+			this.minSuffixComponents = decoder.readIntegerElement(CCNProtocolDTags.MinSuffixComponents);
 		}
 
 		if (decoder.peekStartElement(CCNProtocolDTags.MaxSuffixComponents)) {
-			this.MaxSuffixComponents = decoder.readIntegerElement(CCNProtocolDTags.MaxSuffixComponents);
+			this.maxSuffixComponents = decoder.readIntegerElement(CCNProtocolDTags.MaxSuffixComponents);
 		}
 			
-		//TODO decode PublisherID
-		if (PublisherID.peek(decoder)) {
-			this.Publisher = new PublisherID();
-			this.Publisher.decode(decoder);
+		if (decoder.peekStartElement(CCNProtocolDTags.PublisherPublicKeyDigest)) {
+			this.publisherPublicKeyDigest = new PublisherPublicKeyDigest();
+			this.publisherPublicKeyDigest.decode(decoder);
 		}
 
 		if (decoder.peekStartElement(CCNProtocolDTags.Exclude)) {
-			this.Exclude = new Exclude();
-			this.Exclude.decode(decoder);
+			this.exclude = new Exclude();
+			this.exclude.decode(decoder);
 		}
 		
 		if (decoder.peekStartElement(CCNProtocolDTags.ChildSelector)) {
-			this.ChildSelector = decoder.readIntegerElement(CCNProtocolDTags.ChildSelector);
+			this.childSelector = decoder.readIntegerElement(CCNProtocolDTags.ChildSelector);
 		}
 		
 		if (decoder.peekStartElement(CCNProtocolDTags.AnswerOriginKind)) {
 			// call setter to handle defaulting
-			this.AnswerOriginKind = decoder.readIntegerElement(CCNProtocolDTags.AnswerOriginKind);
+			this.answerOriginKind = decoder.readIntegerElement(CCNProtocolDTags.AnswerOriginKind);
 		}
 		
 		if (decoder.peekStartElement(CCNProtocolDTags.Scope)) {
-			this.Scope = decoder.readIntegerElement(CCNProtocolDTags.Scope);
+			this.scope = decoder.readIntegerElement(CCNProtocolDTags.Scope);
 		}
 
 		if (decoder.peekStartElement(CCNProtocolDTags.InterestLifetime)) {
-			this.InterestLifetime = decoder.readBinaryElement(CCNProtocolDTags.InterestLifetime);
+			this.interestLifetime = decoder.readBinaryElement(CCNProtocolDTags.InterestLifetime);
 		}
 		
 		if (decoder.peekStartElement(CCNProtocolDTags.Nonce)) {
-			this.Nonce = decoder.readBinaryElement(CCNProtocolDTags.Nonce);
+			this.nonce = decoder.readBinaryElement(CCNProtocolDTags.Nonce);
 		}
 		
 		decoder.readEndElement();
 };
 
-Interest.prototype.encode = function(/*XMLEncoder*/ encoder){
+Interest.prototype.to_ccnb = function(/*XMLEncoder*/ encoder){
 		//Could check if name is present
 		
 		encoder.writeStartElement(CCNProtocolDTags.Interest);
 		
-		this.Name.encode(encoder);
+		this.name.encode(encoder);
 	
-		if (null != this.MinSuffixComponents) 
-			encoder.writeElement(CCNProtocolDTags.MinSuffixComponents, this.MinSuffixComponents);	
+		if (null != this.minSuffixComponents) 
+			encoder.writeElement(CCNProtocolDTags.MinSuffixComponents, this.minSuffixComponents);	
 
-		if (null != this.MaxSuffixComponents) 
-			encoder.writeElement(CCNProtocolDTags.MaxSuffixComponents, this.MaxSuffixComponents);
+		if (null != this.maxSuffixComponents) 
+			encoder.writeElement(CCNProtocolDTags.MaxSuffixComponents, this.maxSuffixComponents);
 
-		//TODO Encode PublisherID
+		if (null != this.publisherPublicKeyDigest)
+			this.publisherPublicKeyDigest.encode(encoder);
 		
-		if (null != this.PublisherID)
-			publisherID().encode(encoder);
+		if (null != this.exclude)
+			this.exclude.encode(encoder);
 		
-		//TODO Encode Exclude
-		
-		if (null != this.Exclude)
-			exclude().encode(encoder);
-		
-		if (null != this.ChildSelector) 
-			encoder.writeElement(CCNProtocolDTags.ChildSelector, this.ChildSelector);
+		if (null != this.childSelector) 
+			encoder.writeElement(CCNProtocolDTags.ChildSelector, this.childSelector);
 
 		//TODO Encode OriginKind
-		if (this.DEFAULT_ANSWER_ORIGIN_KIND != this.AnswerOriginKind && this.AnswerOriginKind!=null) 
-			encoder.writeElement(CCNProtocolDTags.AnswerOriginKind, this.AnswerOriginKind);
+		if (this.DEFAULT_ANSWER_ORIGIN_KIND != this.answerOriginKind && this.answerOriginKind!=null) 
+			encoder.writeElement(CCNProtocolDTags.AnswerOriginKind, this.answerOriginKind);
 		
-		if (null != this.Scope) 
-			encoder.writeElement(CCNProtocolDTags.Scope, this.Scope);
+		if (null != this.scope) 
+			encoder.writeElement(CCNProtocolDTags.Scope, this.scope);
 		
-		if (null != this.Nonce)
-			encoder.writeElement(CCNProtocolDTags.Nonce, this.Nonce);
+		if (null != this.nonce)
+			encoder.writeElement(CCNProtocolDTags.Nonce, this.nonce);
 		
 		encoder.writeEndElement();
 
 };
 
+Interest.prototype.matches_name = function(/*ContentName*/ name){
+	var i_name = this.name.Components;
+	var o_name = name.Components;
+
+	// The intrest name is longer than the name we are checking it against.
+	if (i_name.length > o_name.length)
+            return false;
+
+	// Check if at least one of given components doesn't match.
+        for (var i = 0; i < i_name.length; ++i) {
+            if (!DataUtils.arraysEqual(i_name[i], o_name[i]))
+                return false;
+        }
+
+	return true;
+}
+
diff --git a/js/PublisherID.js b/js/PublisherID.js
index 1c98435..64955f3 100644
--- a/js/PublisherID.js
+++ b/js/PublisherID.js
@@ -71,9 +71,7 @@
 	encoder.writeElement(this.getElementLabel(), this.PublisherID);
 };
 	
-PublisherID.peek = function(
-	//XMLDecoder 
-		decoder) {
+PublisherID.peek = function(/* XMLDecoder */ decoder) {
 
 		//Long
 		nextTag = decoder.peekStartElementAsLong();
diff --git a/js/Signature.js b/js/Signature.js
index 9dcbbc5..7eef1d1 100644
--- a/js/Signature.js
+++ b/js/Signature.js
@@ -18,7 +18,7 @@
 	var hex1 = toHex(enc.getReducedOstream());
 
 	var enc = new BinaryXMLEncoder();
-	content.encode(enc);
+	content.to_ccnb(enc);
 	var hex2 = toHex(enc.getReducedOstream());
 
 	var enc = new BinaryXMLEncoder();
diff --git a/js/encoding/EncodingUtils.js b/js/encoding/EncodingUtils.js
index ee6af87..653bafd 100644
--- a/js/encoding/EncodingUtils.js
+++ b/js/encoding/EncodingUtils.js
@@ -2,11 +2,11 @@
 
 
 
-function encodeToHexInterest(int){
+function encodeToHexInterest(interest){
 	
 	var enc = new BinaryXMLEncoder();
  
-	int.encode(enc);
+	interest.to_ccnb(enc);
 	
 	var hex = DataUtils.toHex(enc.getReducedOstream());
 
@@ -19,7 +19,7 @@
 function encodeToHexContentObject(co){
 	var enc = new BinaryXMLEncoder();
  
-	co.encode(enc);
+	co.to_ccnb(enc);
 	
 	var hex = DataUtils.toHex(enc.getReducedOstream());
 
@@ -31,7 +31,7 @@
 function encodeToBinaryContentObject(co){
 	var enc = new BinaryXMLEncoder();
  
-	co.encode(enc);
+	co.to_ccnb(enc);
 	
 	var hex = enc.getReducedOstream();
 
@@ -43,7 +43,7 @@
 function encodeForwardingEntry(co){
 	var enc = new BinaryXMLEncoder();
  
-	co.encode(enc);
+	co.to_ccnb(enc);
 	
 	var bytes = enc.getReducedOstream();
 
@@ -63,11 +63,11 @@
 	
 	if(LOG>3)console.log('DECODING HEX FACE INSTANCE  \n'+numbers);
 
-	i = new FaceInstance();
+	var faceInstance = new FaceInstance();
 
-	i.decode(decoder);
+	faceInstance.decode(decoder);
 
-	return i;
+	return faceInstance;
 	
 }
 
@@ -78,11 +78,11 @@
 	decoder = new BinaryXMLDecoder(numbers);
 	if(LOG>3)console.log('DECODING HEX INTERST  \n'+numbers);
 
-	i = new Interest();
+	var interest = new Interest();
 
-	i.decode(decoder);
+	interest.from_ccnb(decoder);
 
-	return i;
+	return interest;
 	
 }
 
@@ -96,7 +96,7 @@
 	
 	co = new ContentObject();
 
-	co.decode(decoder);
+	co.from_ccnb(decoder);
 
 	return co;
 	
@@ -111,11 +111,11 @@
 	
 	if(LOG>3)console.log('DECODED HEX FORWARDING ENTRY \n'+numbers);
 	
-	co = new ForwardingEntry();
+	forwardingEntry = new ForwardingEntry();
 
-	co.decode(decoder);
+	forwardingEntry.decode(decoder);
 
-	return co;
+	return forwardingEntry;
 	
 }
 
@@ -130,24 +130,24 @@
     else if (co==-2)
 	output+= "CONTENT NAME IS EMPTY"
     else{
-	if(co.Name!=null && co.Name.Components!=null){
+	if(co.name!=null && co.name.Components!=null){
 	    output+= "NAME: ";
 	    
-	    for(var i=0;i<co.Name.Components.length;i++){
-		output+= "/"+ DataUtils.toString(co.Name.Components[i]);
+	    for(var i=0;i<co.name.Components.length;i++){
+		output+= "/"+ DataUtils.toString(co.name.Components[i]);
 	    }
 	    output+= "<br />";
 	    output+= "<br />";
 	}
 	
-	if(co.Content !=null){
-	    output += "CONTENT(ASCII): "+ DataUtils.toString(co.Content);
+	if(co.content !=null){
+	    output += "CONTENT(ASCII): "+ DataUtils.toString(co.content);
 	    
 	    output+= "<br />";
 	    output+= "<br />";
 	}
-	if(co.Content !=null){
-	    output += "CONTENT(hex): "+ DataUtils.toHex(co.Content);
+	if(co.content !=null){
+	    output += "CONTENT(hex): "+ DataUtils.toHex(co.content);
 	    
 	    output+= "<br />";
 	    output+= "<br />";
diff --git a/js/image-loader.html b/js/image-loader.html
index 4ea5b47..b6740bf 100644
--- a/js/image-loader.html
+++ b/js/image-loader.html
@@ -90,10 +90,10 @@
 		var co = connector.get( contentName );
 
 		if(co){
-			 loadedImageString += DataUtils.toString(co.Content);
-			 console.log("Received length: " + co.Content.length);
-			if(co.Content.length == pieceSize){
-				pieceNumber += co.Content.length;
+			 loadedImageString += DataUtils.toString(co.content);
+			 console.log("Received length: " + co.content.length);
+			if(co.content.length == pieceSize){
+				pieceNumber += co.content.length;
 				getPiece();
 			}
 			else document.getElementById('image').src += loadedImageString;
diff --git a/js/lwNDN.js b/js/lwNDN.js
index 41b7acf..717ac07 100644
--- a/js/lwNDN.js
+++ b/js/lwNDN.js
@@ -98,7 +98,7 @@
 		var interestName = new ContentName(['ccnx',ccnxnodename,'selfreg',coBinary]);
 
 		int = new Interest(interestName);
-		int.Scope = 1;
+		int.scope = 1;
 		
 		var hex = encodeToHexInterest(int);
 
diff --git a/js/publish-data.html b/js/publish-data.html
index 9cf6433..1534aa9 100644
--- a/js/publish-data.html
+++ b/js/publish-data.html
@@ -110,7 +110,7 @@
 			else if (co==-2)
 				output+= "CONTENT NAME IS EMPTY"
 			else{
-				if(co.Name!=null && co.Name.Components!=null){
+				if(co.name!=null && co.Name.Components!=null){
 					output+= "NAME: ";
 					
 					for(var i=0;i<co.Name.Components.length;i++){
@@ -120,7 +120,7 @@
 					output+= "<br />";
 				}
 	
-				if(co.Content !=null){
+				if(co.content !=null){
 					output += "CONTENT(ASCII): "+ toString(co.Content);
 					
 					output+= "<br />";
diff --git a/js/request-data.html b/js/request-data.html
index 65dd8c1..b86170b 100644
--- a/js/request-data.html
+++ b/js/request-data.html
@@ -98,24 +98,24 @@
 			if(co==null)
 				output+= "NO CONTENT FOUND"
 			else{
-				if(co.Name!=null && co.Name.Components!=null){
+				if(co.name!=null && co.name.Components!=null){
 					output+= "NAME: ";
 					
-					for(var i=0;i<co.Name.Components.length;i++){
-						output+= "/"+ DataUtils.toString(co.Name.Components[i]);
+					for(var i=0;i<co.name.Components.length;i++){
+						output+= "/"+ DataUtils.toString(co.name.Components[i]);
 					}
 					output+= "<br />";
 					output+= "<br />";
 				}
 	
-				if(co.Content !=null){
-					output += "CONTENT(ASCII): "+ DataUtils.toString(co.Content);
+				if(co.content !=null){
+					output += "CONTENT(ASCII): "+ DataUtils.toString(co.content);
 					
 					output+= "<br />";
 					output+= "<br />";
 				}
-				if(co.Content !=null){
-					output += "CONTENT(hex): "+ DataUtils.toHex(co.Content);
+				if(co.content !=null){
+					output += "CONTENT(hex): "+ DataUtils.toHex(co.content);
 					
 					output+= "<br />";
 					output+= "<br />";
diff --git a/js/testing/test-decode-FaceInstance.html b/js/testing/test-decode-FaceInstance.html
index 7d168cc..7818e55 100644
--- a/js/testing/test-decode-FaceInstance.html
+++ b/js/testing/test-decode-FaceInstance.html
@@ -134,7 +134,7 @@
 				output+= "<br />";
 			}
 			
-			/*if(interest.Name!=null && interest.Name.Components!=null){
+			/*if(interest.name!=null && interest.name.Components!=null){
 				output+= "NAME: ";
 				
 				for(var i=0;i<interest.Name.Components.length;i++){
diff --git a/js/testing/test-decode-Interest+Forwarding+Entry.html b/js/testing/test-decode-Interest+Forwarding+Entry.html
index adb7058..0ece80f 100644
--- a/js/testing/test-decode-Interest+Forwarding+Entry.html
+++ b/js/testing/test-decode-Interest+Forwarding+Entry.html
@@ -77,7 +77,6 @@
 
 		
 		function decode(){
-			
 
 			var input = document.getElementById('result').innerHTML;
 
@@ -92,136 +91,125 @@
 			var output ="";
 			
 			
-			if(interest.Name!=null && interest.Name.Components!=null){
+			if(interest.name!=null && interest.name.Components!=null){
 				output+= "NAME: ";
 				
-				for(var i=0;i<interest.Name.Components.length;i++){
-					output+= "/"+ DataUtils.toString(interest.Name.Components[i]);
+				for(var i=0;i<interest.name.Components.length;i++){
+					output+= "/"+ DataUtils.toString(interest.name.Components[i]);
 				}
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.FaceInstance!=null ){
+			if(interest.faceInstance!=null ){
 				output+= "FaceInstance: ";
 				
-					output+=  interest.FaceInstance;
+					output+=  interest.faceInstance;
 				
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.Exclude!=null ){
+			if(interest.exclude!=null ){
 				output+= "Exclude: ";
 				
-					output+=  interest.Exclude;
+					output+=  interest.exclude;
 				
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.ChildSelector!=null ){
+			if(interest.childSelector!=null ){
 				output+= "ChildSelector: ";
 				
-					output+=  interest.ChildSelector;
+					output+=  interest.childSelector;
 				
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.AnswerOriginKind!=null ){
+			if(interest.answerOriginKind!=null ){
 				output+= "AnswerOriginKind: ";
 				
-					output+=  interest.AnswerOriginKind;
+					output+=  interest.answerOriginKind;
 				
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.InterestLifetime!=null ){
+			if(interest.interestLifetime!=null ){
 				output+= "InterestLifetime: ";
 				
-					output+=  interest.InterestLifetime;
+					output+=  interest.interestLifetime;
 				
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.Nonce!=null ){
+			if(interest.nonce!=null ){
 				output+= "Nonce: ";
 				
-					output+=  interest.Nonce;
+					output+=  interest.nonce;
 				
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
 			
-			if(interest.Scope!=null ){
+			if(interest.scope!=null ){
 				output+= "SCOPE: ";
 				
-					output+=  interest.Scope;
+					output+=  interest.scope;
 				
 				output+= "<br />";
 				output+= "<br />";
 			}
 	
-			if(interest.PublisherID!=null ){
-				output+= "PUBLISHER ID: ";
+			if(interest.publisherPublicKeyDigest!=null ){
+				output+= "PUBLISHER PUBLIC KEY DIGEST: ";
 				
-					output+=  interest.PublisherID.PublisherID;
-					
-					output+= "PUBLISHER ID TYPE: ";
-					output+=  interest.PublisherID.PublisherType;
+				output+=  interest.publisherPublicKeyDigest.PublisherPublicKeyDigest;
+                                        
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.MaxSuffixComponents!=null ){
+			if(interest.maxSuffixComponents!=null ){
 				output+= "MaxSuffixComponents : ";
 				
-				output+=  interest.MaxSuffixComponents;
+				output+=  interest.maxSuffixComponents;
 
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.MinSuffixComponents!=null ){
+			if(interest.minSuffixComponents!=null ){
 				output+= "MinSuffixComponents : ";
 				
-				output+=  interest.MinSuffixComponents;
+				output+=  interest.minSuffixComponents;
 
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.MinSuffixComponents!=null ){
-				output+= "MinSuffixComponents : ";
-				
-				output+=  interest.MinSuffixComponents;
-
-				output+= "<br />";
-				output+= "<br />";
-			}
-			
-			if(interest.Name.Components[3] !=null){
+			if(interest.name.Components[3] !=null){
 				
 				
-				var input = DataUtils.toHex(interest.Name.Components[3]) ;
+				var input = DataUtils.toHex(interest.name.Components[3]) ;
 
 				var contentObject = decodeHexContentObject(input);
 				
-				if(contentObject.Content!=null ){
+				if(contentObject.content!=null ){
 					output+= "Content of content Object: ";
 					
-						output+=  DataUtils.toHex(contentObject.Content);
+						output+=  DataUtils.toHex(contentObject.content);
 						
 					output+= "<br />";
 					output+= "<br />";
 				}
 				
 				
-				var content = DataUtils.toHex(contentObject.Content);
+				var content = DataUtils.toHex(contentObject.content);
 				
 				var co = contentObject;
 				
@@ -229,24 +217,24 @@
 				////////////////////////////////////////
 				
 
-				if(co.Name!=null && co.Name.Components!=null){
+				if(co.name!=null && co.name.Components!=null){
 					output+= "NAME: ";
 					
-					for(var i=0;i<co.Name.Components.length;i++){
-						output+= "/"+ DataUtils.toString(co.Name.Components[i]);
+					for(var i=0;i<co.name.Components.length;i++){
+						output+= "/"+ DataUtils.toString(co.name.Components[i]);
 					}
 					output+= "<br />";
 					output+= "<br />";
 				}
 	
-				if(co.Content !=null){
-					output += "CONTENT(ASCII): "+ DataUtils.toString(co.Content);
+				if(co.content !=null){
+					output += "CONTENT(ASCII): "+ DataUtils.toString(co.content);
 					
 					output+= "<br />";
 					output+= "<br />";
 				}
-				if(co.Content !=null){
-					output += "CONTENT(hex): "+ DataUtils.toHex(co.Content);
+				if(co.content !=null){
+					output += "CONTENT(hex): "+ DataUtils.toHex(co.content);
 					
 					output+= "<br />";
 					output+= "<br />";
@@ -472,7 +460,7 @@
 <body >
 	<form>
 		
-		Please Press decode:<br />
+		Please Press Decode:<br />
 		
 
 	</form>
diff --git a/js/testing/test-encode-decode-ContentObject-bis.html b/js/testing/test-encode-decode-ContentObject-bis.html
index 7956af3..f66cae5 100644
--- a/js/testing/test-encode-decode-ContentObject-bis.html
+++ b/js/testing/test-encode-decode-ContentObject-bis.html
@@ -116,24 +116,24 @@
 			else if (co==-2)
 				output+= "CONTENT NAME IS EMPTY"
 			else{
-				if(co.Name!=null && co.Name.Components!=null){
+				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]);
+					for(var i=0;i<co.name.Components.length;i++){
+						output+= "/"+ toString(co.name.Components[i]);
 					}
 					output+= "<br />";
 					output+= "<br />";
 				}
 	
-				if(co.Content !=null){
-					output += "CONTENT(ASCII): "+ toString(co.Content);
+				if(co.content !=null){
+					output += "CONTENT(ASCII): "+ toString(co.content);
 					
 					output+= "<br />";
 					output+= "<br />";
 				}
-				if(co.Content !=null){
-					output += "CONTENT(hex): "+ toHex(co.Content);
+				if(co.content !=null){
+					output += "CONTENT(hex): "+ toHex(co.content);
 					
 					output+= "<br />";
 					output+= "<br />";
diff --git a/js/testing/test-encode-decode-Interest.html b/js/testing/test-encode-decode-Interest.html
index 04cbae2..dd3e3b4 100644
--- a/js/testing/test-encode-decode-Interest.html
+++ b/js/testing/test-encode-decode-Interest.html
@@ -76,7 +76,7 @@
 		function encode(){
 			var interest = new Interest( new ContentName(document.getElementById('interest').value ) );
 
-			interest.Scope = 1;
+			interest.scope = 1;
 			
 			var output = encodeToHexInterest(interest);
 			
@@ -100,14 +100,14 @@
 			
 			var output ="";
 			
-			if(interest.Name!=null && interest.Name.Components!=null){
+			if(interest.name!=null && interest.name.Components!=null){
 				output+= "NAME: ";
 				
 				
-				output+= interest.Name.getName();
+				output+= interest.name.getName();
 				
-				/*for(var i=0;i<interest.Name.Components.length;i++){
-					output+= "/"+ DataUtils.toString(interest.Name.Components[i]);
+				/*for(var i=0;i<interest.name.Components.length;i++){
+					output+= "/"+ DataUtils.toString(interest.name.Components[i]);
 				}*/
 				
 				output+= "<br />";
@@ -115,48 +115,39 @@
 			}
 	
 			
-			if(interest.Scope!=null ){
+			if(interest.scope!=null ){
 				output+= "SCOPE: ";
 				
-					output+=  interest.Scope;
+					output+=  interest.scope;
 				
 				output+= "<br />";
 				output+= "<br />";
 			}
 	
-			if(interest.PublisherID!=null ){
+			if(interest.publisherID!=null ){
 				output+= "PUBLISHER ID: ";
 				
-					output+=  interest.PublisherID.PublisherID;
+					output+=  interest.publisherID.PublisherID;
 					
 					output+= "PUBLISHER ID TYPE: ";
-					output+=  interest.PublisherID.PublisherType;
+					output+=  interest.publisherID.PublisherType;
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.MaxSuffixComponents!=null ){
+			if(interest.maxSuffixComponents!=null ){
 				output+= "MaxSuffixComponents : ";
 				
-				output+=  interest.MaxSuffixComponents;
+				output+=  interest.maxSuffixComponents;
 
 				output+= "<br />";
 				output+= "<br />";
 			}
 			
-			if(interest.MinSuffixComponents!=null ){
+			if(interest.minSuffixComponents!=null ){
 				output+= "MinSuffixComponents : ";
 				
-				output+=  interest.MinSuffixComponents;
-
-				output+= "<br />";
-				output+= "<br />";
-			}
-			
-			if(interest.MinSuffixComponents!=null ){
-				output+= "MinSuffixComponents : ";
-				
-				output+=  interest.MinSuffixComponents;
+				output+=  interest.minSuffixComponents;
 
 				output+= "<br />";
 				output+= "<br />";
diff --git a/js/testing/test-get.html b/js/testing/test-get.html
index ad4886c..8053655 100644
--- a/js/testing/test-get.html
+++ b/js/testing/test-get.html
@@ -75,7 +75,7 @@
 
 		function getAction(){
 			var interest = new Interest( new ContentName(document.getElementById('interest').value));
-			interest.Scope = 1;
+			interest.scope = 1;
 			
 			var received = get('127.0.0.1', 9695, encodeToHexInterest(interest));	
 
diff --git a/js/testing/test-interest-matches-name.html b/js/testing/test-interest-matches-name.html
new file mode 100644
index 0000000..111789f
--- /dev/null
+++ b/js/testing/test-interest-matches-name.html
@@ -0,0 +1,104 @@
+<?xml version = "1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"DTD/xhtml1-strict.dtd">
+<html xmlns = "http://www.w3.org/1999/xhtml">
+
+<head>
+	<title>NDN Interest Matches Name</title>
+	
+	<script type="text/javascript" src="../java_socket_bridge.js"></script>
+	
+	<script type="text/javascript" src="../CCNProtocolDTags.js"></script>
+	
+	<script type="text/javascript" src="../CCNTime.js"></script>
+	
+	<script type="text/javascript" src="../ContentName.js"></script>
+	
+	<script type="text/javascript" src="../ContentObject.js"></script>
+	
+	<script type="text/javascript" src="../DateFormat.js"></script>
+	
+	<script type="text/javascript" src="../Exclude.js"></script>
+
+	<script type="text/javascript" src="../ExcludeAny.js"></script>
+
+	<script type="text/javascript" src="../ExcludeComponent.js"></script>
+
+	<script type="text/javascript" src="../Interest.js"></script>
+	
+	<script type="text/javascript" src="../KeyLocator.js"></script>
+	
+	<script type="text/javascript" src="../KeyName.js"></script>
+
+	<script type="text/javascript" src="../PublisherID.js"></script>
+	
+	<script type="text/javascript" src="../Signature.js"></script>
+	
+	<script type="text/javascript" src="../SignedInfo.js"></script>
+	
+	<script type="text/javascript" src="../PublisherPublicKeyDigest.js"></script>
+	
+	<script type="text/javascript" src="../FaceInstance.js"></script>
+
+	<script type="text/javascript" src="../ForwardingEntry.js"></script>
+	
+	<script type="text/javascript" src="../encoding/BinaryXMLEncoder.js"></script>
+	
+	<script type="text/javascript" src="../encoding/BinaryXMLCodec.js"></script>
+	
+	<script type="text/javascript" src="../encoding/BinaryXMLDecoder.js"></script>
+	
+	<script type="text/javascript" src="../encoding/DataUtils.js"></script>
+	
+	<script type="text/javascript" src="../encoding/EncodingUtils.js"></script>
+	
+	<script language="JavaScript" type="text/javascript" src="../security/KeyManager.js"></script>
+	
+	<script language="JavaScript" type="text/javascript" src="../securityLib/jsbn.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/jsbn2.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/rsa.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/rsa2.js"></script>
+	
+	<script language="JavaScript" type="text/javascript" src="../securityLib/sha1.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/sha256.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/sha512.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/md5.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/ripemd160.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/base64.js"></script>
+	
+	<script language="JavaScript" type="text/javascript" src="../securityLib/rsapem-1.1.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/rsasign-1.2.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/asn1hex-1.1.js"></script>
+	<script language="JavaScript" type="text/javascript" src="../securityLib/x509-1.1.js"></script>
+
+	<script type="text/javascript">
+	
+		function check(){
+			var interest = new Interest( new ContentName(document.getElementById('interest').value));
+			interest.scope = 1;
+                        
+			var nameToCheck = new ContentName(document.getElementById('nameToCheck').value);
+			
+			var output = (interest.matches_name(nameToCheck) ? "matches" : "doesn't match");
+			document.getElementById('result').innerHTML = output;
+		}
+
+	</script>
+
+</head>
+<body >
+	<form>
+		
+		Please enter the name of an interest:<br />		
+		<input id="interest" type="text" name="INTEREST" value="/ndn/ucla.edu" /> <br/>
+		
+		Please enter a name to check if the interest matches the name:<br />		
+		<input id="nameToCheck" type="text" name="NAME_TO_CHECK" value="/ndn/ucla.edu" /> <br/>
+		
+	</form>
+	<button onclick="check()">Check</button>
+	
+	<p id="result"></p>
+
+</body>
+</html>
diff --git a/js/testing/test-request-send-hex.html b/js/testing/test-request-send-hex.html
index f1acb20..3ed1a90 100644
--- a/js/testing/test-request-send-hex.html
+++ b/js/testing/test-request-send-hex.html
@@ -130,7 +130,7 @@
 				
 				co = new ContentObject();
 	        
-				co.decode(decoder);
+				co.from_ccnb(decoder);
 
 				if(LOG>2) console.log(co);
 			
