first commit
diff --git a/src-old/ContentObject.js b/src-old/ContentObject.js
new file mode 100644
index 0000000..0802479
--- /dev/null
+++ b/src-old/ContentObject.js
@@ -0,0 +1,12 @@
+// JavaScript Document
+
+var ContentObject = function ContentObject(_Signature,_Name,_SignedInfo,_Content){
+	
+	this.Signature = _Signature;
+	this.Name = _Name;
+	this.SignedInfo = _SignedInfo;
+	this.Content=_Content;
+	
+};
+
+exports.ContentObject = ContentObject;
diff --git a/src-old/ContentObjectDecoder.js b/src-old/ContentObjectDecoder.js
new file mode 100644
index 0000000..83e5aee
--- /dev/null
+++ b/src-old/ContentObjectDecoder.js
@@ -0,0 +1,214 @@
+// JavaScript Document
+/*
+	@author: Meki Cherkaoui
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+var ContentObjectEncoder = function ContentObjectEncoder(){
+	
+	
+};
+
+
+/*
+	TT bits specify the type of nodes
+	
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+Encoder.prototype.encodeContentObject = function(_ContentObject){
+	
+	//var slit = function splitNumber(number){
+	//};
+	var i = 0;
+	
+	var addToBuffer = function addToBuffer(buffer,number,tt){
+		
+		
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		var index = 1;
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer[index+i] = splitNumbers[j];
+		}
+		
+	};
+	//NOTE NUMBETR= SIZE
+	var addToBufferData = function addToBuffer(buffer,data,tt){
+		
+		var number = sizeof(data);
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer[index+i] = splitNumbers[j];
+		}
+		
+		for(i=0;i<10;i++){
+			buffer[index+i] = data[i];
+		}
+		
+	};
+	
+	//NOTE NUMBETR= SIZE
+	var addName = function addToBuffer(buffer,name){
+		
+		for(i=0;i<name.size;i++){
+			tt = require('./TAG').tt.CCN_BLOB ;
+			addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+			addCloseTag(buffer);
+		}
+		
+	};
+	
+	
+	var addCloseTag = function addCloseTag(buffer){
+		var tag = DTAGS.CCN_CLOSE;
+		buffer.write(tag);
+	}; 
+	
+	var buffer = new Buffer(1000);
+	 
+	var tag = DTAGS.CCN_DTAG_ContentObject;
+	var tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_Signature;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_SignatureBits;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tt = TT.CCN_BLOB ;
+	addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_Name;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+
+	addName(buffer,_ContentObject.moName,tt);
+
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_SignedInfo;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+	tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Timestamp;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_KeyLocator;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tag = DTAGS.CCN_DTAG_key;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Content;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.msContent,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+
+}
+
+
+Encoder.prototype.encodeContentObjectToFile = function(_filename){
+	
+	
+	var content = "hello world";
+	
+	var name = new require('./Name').Name(['hello']);
+	
+	var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+	
+	var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+	sig.generateSignature(name,sigInfo,content);
+	
+	var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+	
+	var buffer = this.encodeContentObject(co);
+	
+	fs.writeFile(_filename);
+	
+	
+}
+
+
+var co = new ContentObjectEncoder();
+
+
+var file = ContentObjectEncoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/ContentObjectEncoder.js b/src-old/ContentObjectEncoder.js
new file mode 100644
index 0000000..ae10a5f
--- /dev/null
+++ b/src-old/ContentObjectEncoder.js
@@ -0,0 +1,260 @@
+// JavaScript Document
+/*
+	@author: Meki Cherkaoui
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+var ContentObjectEncoder = function ContentObjectEncoder(){
+	
+	
+};
+
+
+/*
+	TT bits specify the type of nodes
+	
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+Encoder.prototype.encodeContentObject = function(_ContentObject){
+	
+	//var slit = function splitNumber(number){
+	//};
+
+	/*
+	 * returns an integer
+	 */
+	var encodeTypeAndVal = function(itype, lvalue, bstream) {
+	        /*
+	        We exploit the fact that encoding is done from the right, so this actually means
+	        there is a deterministic encoding from a long to a Type/Value pair:
+	        
+	        |    0    |    1    |    2    |    3    |    4    |    5    |    6    |    7    |
+	        |ABCD.EFGH|IJKL.MNOP|QRST.UVWX|YZ01.2345|6789.abcd|efgh.ijkl|mnop.qrst|uvwx.yz@#
+	        
+	               60>       53>       46>       39>       32>       25>       18>       11>        4>
+	        |_000.ABCD|_EFG.HIJK|_LMN.OPQR|_STU.VWXY|_Z01.2345|_678.9abc|_defg.hij|_klm.nopq|_rst.uvwx|_yz@#___
+	        
+	        What we want to do is compute the result in MSB order and write it directly
+	        to the channel without any intermediate form.
+	        */
+	   
+	       var bits;
+	       var count = 0;
+	       
+	       // once we start writing bits, we keep writing bits even if they are "0"
+	       var writing = false;
+	       
+	       // a few heuristic to catch the small-bit length patterns
+	       if( value < 0 || value > 15 ) {
+	           int start = 60;
+	           if( 0 <= value ) {
+	        	   if( value < bits_11 )
+	        		   start = 4;
+	        	   else if( value < bits_18 )
+	                   start = 11;
+	               else if( value < bits_32 )
+	                   start = 25;
+	           }
+	           
+	           for( var i = start; i >= 4; i -= 7) {
+	               bits = (int) (value >>> i) & BinaryXMLCodec.XML_REG_VAL_MASK;
+	               if( bits != 0 || writing ) {
+	                   ostream.write(bits);
+	                   count++;
+	                   writing = true;
+	               }
+	           }
+	       }
+	};
+	
+	var addToBuffer = function addToBuffer(buffer,number,tt){
+		
+		
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		var index = 1;
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer[index+i] = splitNumbers[j];
+		}
+		
+	};
+	//NOTE NUMBETR= SIZE
+	var addToBufferData = function addToBuffer(buffer,data,tt){
+		
+		var number = sizeof(data);
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer[index+i] = splitNumbers[j];
+		}
+		
+		for(i=0;i<10;i++){
+			buffer[index+i] = data[i];
+		}
+		
+	};
+	
+	//NOTE NUMBETR= SIZE
+	var addName = function addToBuffer(buffer,name){
+		
+		for(i=0;i<name.size;i++){
+			tt = require('./TAG').tt.CCN_BLOB ;
+			addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+			addCloseTag(buffer);
+		}
+		
+	};
+	
+	
+	var addCloseTag = function addCloseTag(buffer){
+		var tag = DTAGS.CCN_CLOSE;
+		buffer.write(tag);
+	}; 
+	
+	var buffer = new Buffer(1000);
+	 
+	var tag = DTAGS.CCN_DTAG_ContentObject;
+	var tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_Signature;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_SignatureBits;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tt = TT.CCN_BLOB ;
+	addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_Name;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+
+	addName(buffer,_ContentObject.moName,tt);
+
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_SignedInfo;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+	tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Timestamp;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_KeyLocator;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tag = DTAGS.CCN_DTAG_key;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Content;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.msContent,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+
+}
+
+
+Encoder.prototype.encodeContentObjectToFile = function(_filename){
+	
+	
+	var content = "hello world";
+	
+	var name = new require('./Name').Name(['hello']);
+	
+	var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+	
+	var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+	sig.generateSignature(name,sigInfo,content);
+	
+	var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+	
+	var buffer = this.encodeContentObject(co);
+	
+	fs.writeFile(_filename);
+	
+	
+}
+
+
+var co = new ContentObjectEncoder();
+
+
+var file = ContentObjectEncoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/Decoder.js b/src-old/Decoder.js
new file mode 100644
index 0000000..7a59e5e
--- /dev/null
+++ b/src-old/Decoder.js
@@ -0,0 +1,42 @@
+// JavaScript Document
+
+
+var Decoder = function Decoder(){
+	
+	
+	//PRIVATE FUNCTIONS
+	
+
+}
+
+
+//PUBLIC FUNCTIONS
+
+Decoder.prototype.decodeFile = function(filename){
+	var fs = require('fs');
+
+	var file = fs.readFile(filename, function(err,data){
+  		if(err) {
+   		 console.error("Could not open file: %s", err);
+   		 process.exit(1);
+  		}
+		
+		//console.log(data);
+		//console.log(data.toString('binary'));
+		for( i=0;i<data.length ;i++) {
+			var v = data[i];
+			console.log(v.toString(2)+'\n');
+		}
+
+		console.log( require('./TAG.js').d.CCN_DTAG_Any);
+		var a =new Buffer('aGVsbG8gd29ybGQK','base64');
+		console.log(a.toString('base64'));
+
+	});
+}
+
+
+
+var decoder = new Decoder();
+var file = decoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
diff --git a/src-old/Encoder.js b/src-old/Encoder.js
new file mode 100644
index 0000000..4ced16c
--- /dev/null
+++ b/src-old/Encoder.js
@@ -0,0 +1,208 @@
+// JavaScript Document
+/*
+	Meki Cherkaoui
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+var Encoder = function Encoder(){
+	
+	
+};
+/*
+	TT bits specify the type of nodes
+
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+Encoder.prototype.encodeContentObject = function(_ContentObject){
+	
+	//var slit = function splitNumber(number){
+	//};
+	var i = 0;
+	
+	var addToBuffer = function addToBuffer(buffer,number,tt){
+		
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		var index = 1;
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer[index+i] = splitNumbers[j];
+		}
+		
+	};
+	//NOTE NUMBETR= SIZE
+	var addToBufferData = function addToBuffer(buffer,data,tt){
+		
+		var number = sizeof(data);
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer[index+i] = splitNumbers[j];
+		}
+		
+		for(i=0;i<10;i++){
+			buffer[index+i] = data[i];
+		}
+		
+	};
+	
+	//NOTE NUMBETR= SIZE
+	var addName = function addToBuffer(buffer,name){
+		
+		for(i=0;i<name.size;i++){
+			tt = require('./TAG').tt.CCN_BLOB ;
+			addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+			addCloseTag(buffer);
+		}
+		
+	};
+	
+	
+	var addCloseTag = function addCloseTag(buffer){
+		var tag = DTAGS.CCN_CLOSE;
+		buffer.write(tag);
+	}; 
+	
+	var buffer = new Buffer(1000);
+	 
+	var tag = DTAGS.CCN_DTAG_ContentObject;
+	var tt = require('./TAG').tt.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_Signature;
+	tt = require('./TAG').tt.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_SignatureBits;
+	tt = require('./TAG').tt.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tt = require('./TAG').tt.CCN_BLOB ;
+	addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_Name;
+	tt = require('./TAG').tt.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+
+	addName(buffer,_ContentObject.moName,tt);
+
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_SignedInfo;
+	tt = require('./TAG').tt.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+	tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+	tt = require('./TAG').tt.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Timestamp;
+	tt = require('./TAG').tt.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_KeyLocator;
+	tt = require('./TAG').tt.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tag = DTAGS.CCN_DTAG_key;
+	tt = require('./TAG').tt.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Content;
+	tt = require('./TAG').tt.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.msContent,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+
+}
+
+
+Encoder.prototype.encodeContentObjectToFile = function(_filename){
+	
+	
+	var content = "hello world";
+	
+	var name = new require('./Name').Name(['hello']);
+	
+	var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+	
+	var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+	sig.generateSignature(name,sigInfo,content);
+	
+	var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+	
+	var buffer = this.encodeContentObject(co);
+	
+	fs.writeFile(_filename);
+	
+	
+}
+
+
+var Encoder = new Encoder();
+
+var file = Encoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/InterestMessage.js b/src-old/InterestMessage.js
new file mode 100644
index 0000000..90177b4
--- /dev/null
+++ b/src-old/InterestMessage.js
@@ -0,0 +1,17 @@
+// JavaScript Document
+
+var InterestMessage = function InterestMessage(_Name,_MinSuffixComponents,_MaxSuffixComponents,_PublisherPublicKeyDigest, _Exclude, _ChildSelector,_AnswerOriginKind,_Scope,_InterestLifetime,_Nonce){
+	
+	this.Name = _Name;
+	this.MinSuffixComponents = _MinSuffixComponents;
+	this.MaxSuffixComponents = _MaxSuffixComponents;
+	this.PublisherPublicKeyDigest=_PublisherPublicKeyDigest;
+	this.Exclude=_Exclude;
+	this.ChildSelector=_ChildSelector;
+	this.Scope=_Scope;
+	this.InterestLifetime=_InterestLifetime;
+	this.Nonce = _Nonce;
+	
+};
+
+exports.InterestMessage = InterestMessage;
diff --git a/src-old/InterestMessageDecoder.js b/src-old/InterestMessageDecoder.js
new file mode 100644
index 0000000..565c1a9
--- /dev/null
+++ b/src-old/InterestMessageDecoder.js
@@ -0,0 +1,207 @@
+// JavaScript Document
+/*
+	@author: Meki Cherkaoui
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+var Encoder = function Encoder(){
+	
+	
+};
+/*
+	TT bits specify the type of nodes
+
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+Encoder.prototype.encodeContentObject = function(_ContentObject){
+	
+	//var slit = function splitNumber(number){
+	//};
+	var i = 0;
+	
+	var addToBuffer = function addToBuffer(buffer,number,tt){
+		
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		var index = 1;
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer[index+i] = splitNumbers[j];
+		}
+		
+	};
+	//NOTE NUMBETR= SIZE
+	var addToBufferData = function addToBuffer(buffer,data,tt){
+		
+		var number = sizeof(data);
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & ~require('./TAG').d.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT |require('./TAG').d.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer[index+i] = splitNumbers[j];
+		}
+		
+		for(i=0;i<10;i++){
+			buffer[index+i] = data[i];
+		}
+		
+	};
+	
+	//NOTE NUMBETR= SIZE
+	var addName = function addToBuffer(buffer,name){
+		
+		for(i=0;i<name.size;i++){
+			tt = require('./TAG').tt.CCN_BLOB ;
+			addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+			addCloseTag(buffer);
+		}
+		
+	};
+	
+	
+	var addCloseTag = function addCloseTag(buffer){
+		var tag = DTAGS.CCN_CLOSE;
+		buffer.write(tag);
+	}; 
+	
+	var buffer = new Buffer(1000);
+	 
+	var tag = DTAGS.CCN_DTAG_ContentObject;
+	var tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_Signature;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_SignatureBits;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tt = TT.CCN_BLOB ;
+	addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_Name;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+
+	addName(buffer,_ContentObject.moName,tt);
+
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_SignedInfo;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+	tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Timestamp;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_KeyLocator;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tag = DTAGS.CCN_DTAG_key;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Content;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.msContent,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+
+}
+
+
+Encoder.prototype.encodeContentObjectToFile = function(_filename){
+	
+	
+	var content = "hello world";
+	
+	var name = new require('./Name').Name(['hello']);
+	
+	var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+	
+	var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+	sig.generateSignature(name,sigInfo,content);
+	
+	var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+	
+	var buffer = this.encodeContentObject(co);
+	
+	fs.writeFile(_filename);
+	
+}
+
+
+var Encoder = new Encoder();
+
+var file = Encoder.decodeFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/InterestMessageEncoder.js b/src-old/InterestMessageEncoder.js
new file mode 100644
index 0000000..ba90934
--- /dev/null
+++ b/src-old/InterestMessageEncoder.js
@@ -0,0 +1,234 @@
+// JavaScript Document
+/*
+	InterestMessageEncoder is used to convert XML Interest Message into Binary Interest Message.
+	@author: Meki Cherkaoui
+	
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+/*
+	Constructor for the IME
+*/
+var InterestMessageEncoder = function InterestMessageEncoder(){
+	
+	
+};
+
+/*
+	TT bits specify the type of nodes
+
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+
+/*
+	Encode function takes in a content object and returs a buffer containing the whole binary encoding.
+	
+*/
+Encoder.prototype.encodeContentObject = function(_ContentObject){
+	
+	
+	var i = 0;
+	
+	
+	
+	/*
+		This function will add a Tag to the buffer
+		The number is the dtag number and tt is the tag type
+		http://www.ccnx.org/documentation/protocol/ccnx-protocol-2/ccnx-binary-encoding-ccnb/
+	
+	*/
+	var addTagToBuffer = function(buffer,number,tt){
+		
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & DTAGS.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		var index = 1;
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT | DTAGS.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer.write(splitNumbers[j]);
+		}
+		
+	};
+	
+	//NOTE NUMBETR= SIZE
+	var addToBuffer = function(buffer,data,tt){
+		
+		var number = sizeof(data);
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & ~DTAGS.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT | DTAGS.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer[index+i] = splitNumbers[j];
+		}
+		
+		for(i=0;i<data.length;i++){
+			buffer[index+i] = data[i];
+		}
+		
+	};
+	
+	
+	/*
+		Add tag to buffer:
+			
+		
+	*/
+	var addName = function(buffer,name){
+		
+		for(i=0;i<name.size;i++){
+			tt = require('./TAG').tt.CCN_BLOB ;
+			addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+			addCloseTag(buffer);
+		}
+		
+	};
+	
+	
+	var addCloseTag = function(buffer){
+		var tag = DTAGS.CCN_CLOSE;
+		buffer.write(tag);
+	}; 
+	
+	var buffer = new Buffer(1000);
+	 
+	var tag = DTAGS.CCN_DTAG_ContentObject;
+	var tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_Signature;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_SignatureBits;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tt = TT.CCN_BLOB ;
+	addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_Name;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+
+	addName(buffer,_ContentObject.moName,tt);
+
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_SignedInfo;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+	tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Timestamp;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_KeyLocator;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tag = DTAGS.CCN_DTAG_key;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Content;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.msContent,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+
+
+	return buffer;
+}
+
+
+Encoder.prototype.encodeToFile = function(_filename){
+	
+	
+	var content = "hello world";
+	
+	var name = new require('./Name').Name(['hello']);
+	
+	var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+	
+	var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+	sig.generateSignature(name,sigInfo,content);
+	
+	var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+	
+	var buffer = this.encodeContentObject(co);
+	
+	fs.writeFile(_filename);
+	
+	
+}
+
+
+var InterestMessageEncoder = new InterestMessageEncoder();
+
+var file = InterestMessageEncoder.encodeToFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/InterestMessageEncodingTest.js b/src-old/InterestMessageEncodingTest.js
new file mode 100644
index 0000000..a5c843d
--- /dev/null
+++ b/src-old/InterestMessageEncodingTest.js
@@ -0,0 +1,235 @@
+// JavaScript Document
+/*
+	InterestMessageEncoder is used to convert XML Interest Message into Binary Interest Message.
+	@author: Meki Cherkaoui
+	
+*/
+var DTAGS = require('./TAG').d;
+var TT = require('./TAG').tt;
+
+
+
+/*
+	Constructor for the IME
+*/
+var InterestMessageEncoder = function InterestMessageEncoder(){
+	
+	
+};
+
+/*
+	TT bits specify the type of nodes
+
+*/
+var CCN_TT_BITS=3;
+var CCN_TT_MASK=((1 << CCN_TT_BITS) - 1);
+var CCN_MAX_TINY=((1 << (7-CCN_TT_BITS)) - 1);
+var CCN_TT_HBIT=((1 << 7));
+
+
+/*
+	Encode function takes in a content object and returs a buffer containing the whole binary encoding.
+	
+*/
+InterestMessageEncoder.prototype.encodeContentObject = function(_InterestMessage){
+	
+	
+	var i = 0;
+	
+	
+	
+	/*
+		This function will add a Tag to the buffer
+		The number is the dtag number and tt is the tag type
+		http://www.ccnx.org/documentation/protocol/ccnx-protocol-2/ccnx-binary-encoding-ccnb/
+	
+	*/
+	var addTagToBuffer = function(buffer,number,tt){
+		
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & DTAGS.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		var index = 1;
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT | DTAGS.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer.write(splitNumbers[j]);
+		}
+		
+	};
+	
+	//NOTE NUMBETR= SIZE
+	var addToBuffer = function(buffer,data,tt){
+		
+		var number = sizeof(data);
+		var sizeOfBuffer = 1+8*((sizeof(number)+6)/7);
+		
+		splitNumbers = new Buffer(sizeOfBuffer);
+		
+		number >>= 7-CCN_TT_BITS;
+		
+		splitNumbers.write((CCN_TT_HBIT & ~DTAGS.CCN_CLOSE) |
+  			((number & CCN_MAX_TINY) << CCN_TT_BITS) |
+  			(CCN_TT_MASK & tt));
+		
+		
+		while(number>0){
+			splitNumbers.write( number & ~CCN_TT_HBIT | DTAGS.CCN_CLOSE);
+			index++;
+			number>>=7;
+		}
+		
+		for( i=0, j=sizeofBuffer-1;i <sizeOfBuffer;i++,j--) {
+		
+			buffer[index+i] = splitNumbers[j];
+		}
+		
+		for(i=0;i<data.length;i++){
+			buffer[index+i] = data[i];
+		}
+		
+	};
+	
+	
+	/*
+		Add tag to buffer:
+			
+		
+	*/
+	var addName = function(buffer,name){
+		
+		for(i=0;i<name.size;i++){
+			tt = require('./TAG').tt.CCN_BLOB ;
+			addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+			addCloseTag(buffer);
+		}
+		
+	};
+	
+	
+	var addCloseTag = function(buffer){
+		var tag = DTAGS.CCN_CLOSE;
+		buffer.write(tag);
+	}; 
+	
+	var buffer = new Buffer(1000);
+	 
+	var tag = DTAGS.CCN_DTAG_ContentObject;
+	var tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_Signature;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	
+	tag = DTAGS.CCN_SignatureBits;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tt = TT.CCN_BLOB ;
+	addToBufferData(buffer,_ContentObject.moSignature.SignatureBits,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_Name;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+
+	addName(buffer,_ContentObject.moName,tt);
+
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_SignedInfo;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+
+	tag = DTAGS.CCN_DTAG_PublisherPublicKeyDigest;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msPublisherPublicKeyDigest ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Timestamp;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msTimestamp ,tt);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_KeyLocator;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	tag = DTAGS.CCN_DTAG_key;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.moSignedInfo.msKeyLocator ,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+	
+	tag = DTAGS.CCN_DTAG_Content;
+	tt = TT.CCN_DTAG ;
+	addToBuffer(buffer,tag,tt);
+	
+	addToBufferData(buffer,_ContentObject.msContent,tt);
+	
+	addCloseTag(buffer);
+	
+	addCloseTag(buffer);
+
+
+	return buffer;
+}
+
+
+Encoder.prototype.encodeToFile = function(_filename){
+	
+	
+	var content = "hello world";
+	
+	var name = new require('./Name').Name(['hello']);
+	
+	var sigInfo = new require('./SignatureInfo').SignatureInfo(new Buffer('h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3qwzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw='));
+	
+	var sig = new require('./Signature').Signature(new Buffer("IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=",'base64'), new Buffer('BPMrnKOi','base64'), new Buffer('MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtmCX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMdnsqHNXT/mCJchT847wIDAQAB','base64'));
+
+	sig.generateSignature(name,sigInfo,content);
+	
+	var co = new require('./ContentObject').ContentObject(sig,name,sigInfo,content);
+	
+	var buffer = this.encodeContentObject(co);
+	
+	fs.writeFile(_filename);
+	
+	
+}
+
+
+var InterestMessageEncoder = new InterestMessageEncoder();
+
+var file = InterestMessageEncoder.encodeToFile('/Users/eastman/Desktop/CCN/ccnx-0.5.0rc1/hello');
+
+
diff --git a/src-old/Name.js b/src-old/Name.js
new file mode 100644
index 0000000..6882f0e
--- /dev/null
+++ b/src-old/Name.js
@@ -0,0 +1,6 @@
+// JavaScript Document
+var Name = function Name(_Component){
+	this.Component = _Component;
+};
+
+exports.Name = Name;
\ No newline at end of file
diff --git a/src-old/Signature.js b/src-old/Signature.js
new file mode 100644
index 0000000..2d1d878
--- /dev/null
+++ b/src-old/Signature.js
@@ -0,0 +1,8 @@
+// JavaScript Document
+var Signature = function(_DigestAlgorithm, _Witness, _SignatureBits){
+	this.DigestAlgorithm = _DigestAlgorithm;
+	this.Witness = _Witness;
+	this.SignatureBits = _SignatureBits;
+}
+
+exports.Signature = Signature;
\ No newline at end of file
diff --git a/src-old/SignedInfo.js b/src-old/SignedInfo.js
new file mode 100644
index 0000000..dcc083f
--- /dev/null
+++ b/src-old/SignedInfo.js
@@ -0,0 +1,12 @@
+// JavaScript Document
+var SignedInfo = function SignedInfo(_PublisherPublicKeyDigest,_Timestamp,_Type,  _KeyLocator,_FreshnessSeconds,_FinalBlockID){
+	
+	this.PublisherPublicKeyDigest = _PublisherPublicKeyDigest;
+	this.Timestamp = _Timestamp;
+	this.FreshnessSeconds = _FinalBlockID;
+	this.FinalBlockID = _FinalBlockID;
+	this.KeyLocator= _KeyLocator;
+}
+
+exports.SignedInfo = SignedInfo;
+
diff --git a/src-old/TAG.js b/src-old/TAG.js
new file mode 100644
index 0000000..d95c610
--- /dev/null
+++ b/src-old/TAG.js
@@ -0,0 +1,113 @@
+// JavaScript Document
+
+
+//d are the dictionnary tags
+exports.tt= {
+  CCN_EXT : 0x00,
+  CCN_TAG : 0x01,
+  CCN_DTAG : 0x02,
+  CCN_ATTR : 0x03,
+  CCN_DATTR : 0x04,
+  CCN_BLOB : 0x05,
+  CCN_UDATA : 0x06
+};
+
+//d are the dictionnary tags
+exports.dtags= {
+  CCN_CLOSE :0,
+  CCN_DTAG_Any : 13,
+  CCN_DTAG_Name : 14,
+  CCN_DTAG_Component : 15,
+  CCN_DTAG_Certificate : 16,
+  CCN_DTAG_Collection : 17,
+  CCN_DTAG_CompleteName : 18,
+  CCN_DTAG_Content : 19,
+  CCN_DTAG_SignedInfo : 20,
+  CCN_DTAG_ContentDigest : 21,
+  CCN_DTAG_ContentHash : 22,
+  CCN_DTAG_Count : 24,
+  CCN_DTAG_Header : 25,
+  CCN_DTAG_Interest : 26,	/* 20090915 */
+  CCN_DTAG_Key : 27,
+  CCN_DTAG_KeyLocator : 28,
+  CCN_DTAG_KeyName : 29,
+  CCN_DTAG_Length : 30,
+  CCN_DTAG_Link : 31,
+  CCN_DTAG_LinkAuthenticator : 32,
+  CCN_DTAG_NameComponentCount : 33,	/* DeprecatedInInterest */
+  CCN_DTAG_RootDigest : 36,
+  CCN_DTAG_Signature : 37,
+  CCN_DTAG_Start : 38,
+  CCN_DTAG_Timestamp : 39,
+  CCN_DTAG_Type : 40,
+  CCN_DTAG_Nonce : 41,
+  CCN_DTAG_Scope : 42,
+  CCN_DTAG_Exclude : 43,
+  CCN_DTAG_Bloom : 44,
+  CCN_DTAG_BloomSeed : 45,
+  CCN_DTAG_AnswerOriginKind : 47,
+  CCN_DTAG_InterestLifetime : 48,
+  CCN_DTAG_Witness : 53,
+  CCN_DTAG_SignatureBits : 54,
+  CCN_DTAG_DigestAlgorithm : 55,
+  CCN_DTAG_BlockSize : 56,
+  CCN_DTAG_FreshnessSeconds : 58,
+  CCN_DTAG_FinalBlockID : 59,
+  CCN_DTAG_PublisherPublicKeyDigest : 60,
+  CCN_DTAG_PublisherCertificateDigest : 61,
+  CCN_DTAG_PublisherIssuerKeyDigest : 62,
+  CCN_DTAG_PublisherIssuerCertificateDigest : 63,
+  CCN_DTAG_ContentObject : 64,	/* 20090915 */
+  CCN_DTAG_WrappedKey : 65,
+  CCN_DTAG_WrappingKeyIdentifier : 66,
+  CCN_DTAG_WrapAlgorithm : 67,
+  CCN_DTAG_KeyAlgorithm : 68,
+  CCN_DTAG_Label : 69,
+  CCN_DTAG_EncryptedKey : 70,
+  CCN_DTAG_EncryptedNonceKey : 71,
+  CCN_DTAG_WrappingKeyName : 72,
+  CCN_DTAG_Action : 73,
+  CCN_DTAG_FaceID : 74,
+  CCN_DTAG_IPProto : 75,
+  CCN_DTAG_Host : 76,
+  CCN_DTAG_Port : 77,
+  CCN_DTAG_MulticastInterface : 78,
+  CCN_DTAG_ForwardingFlags : 79,
+  CCN_DTAG_FaceInstance : 80,
+  CCN_DTAG_ForwardingEntry : 81,
+  CCN_DTAG_MulticastTTL : 82,
+  CCN_DTAG_MinSuffixComponents : 83,
+  CCN_DTAG_MaxSuffixComponents : 84,
+  CCN_DTAG_ChildSelector : 85,
+  CCN_DTAG_RepositoryInfo : 86,
+  CCN_DTAG_Version : 87,
+  CCN_DTAG_RepositoryVersion : 88,
+  CCN_DTAG_GlobalPrefix : 89,
+  CCN_DTAG_LocalName : 90,
+  CCN_DTAG_Policy : 91,
+  CCN_DTAG_Namespace : 92,
+  CCN_DTAG_GlobalPrefixName : 93,
+  CCN_DTAG_PolicyVersion : 94,
+  CCN_DTAG_KeyValueSet : 95,
+  CCN_DTAG_KeyValuePair : 96,
+  CCN_DTAG_IntegerValue : 97,
+  CCN_DTAG_DecimalValue : 98,
+  CCN_DTAG_StringValue : 99,
+  CCN_DTAG_BinaryValue : 100,
+  CCN_DTAG_NameValue : 101,
+  CCN_DTAG_Entry : 102,
+  CCN_DTAG_ACL : 103,
+  CCN_DTAG_ParameterizedName : 104,
+  CCN_DTAG_Prefix : 105,
+  CCN_DTAG_Suffix : 106,
+  CCN_DTAG_Root : 107,
+  CCN_DTAG_ProfileName : 108,
+  CCN_DTAG_Parameters : 109,
+  CCN_DTAG_InfoString : 110,
+  CCN_DTAG_StatusResponse : 112,
+  CCN_DTAG_StatusCode : 113,
+  CCN_DTAG_StatusText : 114,
+  CCN_DTAG_Nack : 200,
+  CCN_DTAG_SequenceNumber : 256,
+  CCN_DTAG_CCNProtocolDataUnit : 17702112
+};
\ No newline at end of file
diff --git a/src-old/TextXMLEncoder.js b/src-old/TextXMLEncoder.js
new file mode 100644
index 0000000..402022d
--- /dev/null
+++ b/src-old/TextXMLEncoder.js
@@ -0,0 +1,18 @@
+/*
+	
+ */
+
+
+/**
+ * An implementation of XMLEncoder for the Text codec. 
+ * 
+ * @see TextXMLCodec
+ * @see XMLEncoder
+ */
+var TextXMLEncoder = function TextXMLEncoder(){
+	
+	
+	
+};
+
+
diff --git a/src/CCNProtocolDTags.js b/src/CCNProtocolDTags.js
new file mode 100644
index 0000000..cab4a4c
--- /dev/null
+++ b/src/CCNProtocolDTags.js
@@ -0,0 +1,125 @@
+
+
+
+exports.CCNProtocolDTags = {
+
+	/**
+	 * Note if you add one of these, add it to the reverse string map as well.
+	 * Emphasize getting the work done at compile time over trying to make something
+	 * flexible and developer error-proof.
+	 */
+		
+	 Any : 13,
+	 Name : 14,
+	 Component : 15,
+	 Certificate : 16,
+	 Collection : 17,
+	 CompleteName : 18,
+	 Content : 19,
+	 SignedInfo : 20,
+	 ContentDigest : 21,
+	 ContentHash : 22,
+	 Count : 24,
+	 Header : 25,
+	 Interest : 26,	/* 20090915 */
+	 Key : 27,
+	 KeyLocator : 28,
+	 KeyName : 29,
+	 Length : 30,
+	 Link : 31,
+	 LinkAuthenticator : 32,
+	 NameComponentCount : 33,	/* DeprecatedInInterest */
+	 RootDigest : 36,
+	 Signature : 37,
+	 Start : 38,
+	 Timestamp : 39,
+	 Type : 40,
+	 Nonce : 41,
+	 Scope : 42,
+	 Exclude : 43,
+	 Bloom : 44,
+	 BloomSeed : 45,
+	 AnswerOriginKind : 47,
+	 InterestLifetime : 48,
+	 Witness : 53,
+	 SignatureBits : 54,
+	 DigestAlgorithm : 55,
+	 BlockSize : 56,
+	 FreshnessSeconds : 58,
+	 FinalBlockID : 59,
+	 PublisherPublicKeyDigest : 60,
+	 PublisherCertificateDigest : 61,
+	 PublisherIssuerKeyDigest : 62,
+	 PublisherIssuerCertificateDigest : 63,
+	 ContentObject : 64,	/* 20090915 */
+	 WrappedKey : 65,
+	 WrappingKeyIdentifier : 66,
+	 WrapAlgorithm : 67,
+	 KeyAlgorithm : 68,
+	 Label : 69,
+	 EncryptedKey : 70,
+	 EncryptedNonceKey : 71,
+	 WrappingKeyName : 72,
+	 Action : 73,
+	 FaceID : 74,
+	 IPProto : 75,
+	 Host : 76,
+	 Port : 77,
+	 MulticastInterface : 78,
+	 ForwardingFlags : 79,
+	 FaceInstance : 80,
+	 ForwardingEntry : 81,
+	 MulticastTTL : 82,
+	 MinSuffixComponents : 83,
+	 MaxSuffixComponents : 84,
+	 ChildSelector : 85,
+	 RepositoryInfo : 86,
+	 Version : 87,
+	 RepositoryVersion : 88,
+	 GlobalPrefix : 89,
+	 LocalName : 90,
+	 Policy : 91,
+	 Namespace : 92,
+	 GlobalPrefixName : 93,
+	 PolicyVersion : 94,
+	 KeyValueSet : 95,
+	 KeyValuePair : 96,
+	 IntegerValue : 97,
+	 DecimalValue : 98,
+	 StringValue : 99,
+	 BinaryValue : 100,
+	 NameValue : 101,
+	 Entry : 102,
+	 ACL : 103,
+	 ParameterizedName : 104,
+	 Prefix : 105,
+	 Suffix : 106,
+	 Root : 107,
+	 ProfileName : 108,
+	 Parameters : 109,
+	 InfoString : 110,
+	// 111 unallocated
+	 StatusResponse : 112,
+	 StatusCode : 113,
+	 StatusText : 114,
+
+	// Sync protocol
+	 SyncNode : 115,
+	 SyncNodeKind : 116,
+	 SyncNodeElement : 117,
+	 SyncVersion : 118,
+	 SyncNodeElements : 119,
+	 SyncContentHash : 120,
+	 SyncLeafCount : 121,
+	 SyncTreeDepth : 122,
+	 SyncByteCount : 123,
+	 ConfigSlice : 124,
+	 ConfigSliceList : 125,
+	 ConfigSliceOp : 126,
+
+	// Remember to keep in sync with schema/tagnames.csvsdict
+	 CCNProtocolDataUnit : 17702112,
+	 CCNPROTOCOL_DATA_UNIT : "CCNProtocolDataUnit"
+};
+
+
diff --git a/src/ContentName.js b/src/ContentName.js
new file mode 100644
index 0000000..54d70f9
--- /dev/null
+++ b/src/ContentName.js
@@ -0,0 +1,46 @@
+
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var ContentName = function ContentName(_Components){
+
+
+	this.SCHEME = "ccnx:";
+
+	this.ORIGINAL_SCHEME = "ccn:";
+
+	this.SEPARATOR = "/";
+	this.ROOT = null;
+
+	this.Components = _Components;
+};
+
+exports.ContentName = ContentName;
+
+ContentName.prototype.decode = function(/*XMLDecoder*/ decoder)  {
+		decoder.readStartElement(this.getElementLabel());
+
+		this.Components = new Array(); //new ArrayList<byte []>();
+
+		while (decoder.peekStartElement(CCNProtocolDTags.Component)) {
+			this.Components.add(decoder.readBinaryElement(CCNProtocolDTags.Component));
+		}
+
+		decoder.readEndElement();
+};
+
+ContentName.prototype.encode = function(/*XMLEncoder*/ encoder)  {
+		//if (!validate()) {
+			//throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+		//}
+
+		encoder.writeStartElement(this.getElementLabel());
+		var count = this.Components.length;
+		for (var i=0; i < count; ++i) {
+			encoder.writeElement(CCNProtocolDTags.Component, this.Components.get(i));
+		}
+		encoder.writeEndElement();
+};
+
+ContentName.prototype.getElementLabel = function(){
+	return CCNProtocolDTags.Name;
+};
diff --git a/src/ContentObject.js b/src/ContentObject.js
new file mode 100644
index 0000000..fb1ff09
--- /dev/null
+++ b/src/ContentObject.js
@@ -0,0 +1,61 @@
+
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var ContentObject = function ContentObject(_Name,_SignedInfo,_Content,_Signature){
+	
+	
+	this.Name = _Name;
+	this.SignedInfo = _SignedInfo;
+	this.Content=_Content;
+	this.Signature = _Signature;
+
+};
+
+exports.ContentObject = ContentObject;
+
+
+ContentObject.prototype.decode = function(/*XMLDecoder*/ decoder) {
+	
+		decoder.readStartElement(this.getElementLabel());
+
+		this.Signature = new Signature();
+		this.Signature.decode(decoder);
+
+		this.Name = new ContentName();
+		this.Name.decode(decoder);
+
+		this.SignedInfo = new SignedInfo();
+		this.SignedInfo.decode(decoder);
+
+		this.Content = decoder.readBinaryElement(CCNProtocolDTags.Content);
+
+		decoder.readEndElement();
+
+};
+
+
+ContentObject.prototype.encode = function(/*XMLEncoder*/ encoder)  {
+	
+	if((null == this.Name) && (null==this.SignedInfo) && (null ==this.Signature)){
+		
+		throw "Illegal input inside encode of Content Object";
+	}
+	/* 
+	 * if (!validate()) {
+			throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+		}*/
+		
+	encoder.writeStartElement(this.getElementLabel());
+
+	this.Signature.encode(encoder);
+	this.Name.encode(encoder);
+	this.SignedInfo.encode(encoder);
+
+	encoder.writeElement(CCNProtocolDTags.Content, this.Content);
+
+	encoder.writeEndElement();
+
+};
+
+
+ContentObject.prototype.getElementLabel= function(){returnCCNProtocolDTags.ContentObject;};
\ No newline at end of file
diff --git a/src/Exclude.js b/src/Exclude.js
new file mode 100644
index 0000000..667c8cf
--- /dev/null
+++ b/src/Exclude.js
@@ -0,0 +1,54 @@
+
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var Exclude = function Exclude(_Values){ 
+	
+	this.OPTIMUM_FILTER_SIZE = 100;
+	
+
+	this.Values = _Values; //array of elements
+	
+}
+exports.Exclude = Exclude;
+
+Exclude.prototype.decode = function(/*XMLDecoder*/ decoder) {
+
+
+		
+		decoder.readStartElement(this.getElementLabel());
+
+			//TODO BUGS
+			/*var component;
+			var any = false;
+			while ((component = decoder.peekStartElement(CCNProtocolDTags.Component)) || 
+					(any = decoder.peekStartElement(CCNProtocolDTags.Any)) ||
+						decoder.peekStartElement(CCNProtocolDTags.Bloom)) {
+				var ee = component?new ExcludeComponent(): any ? new ExcludeAny() : new BloomFilter();
+				ee.decode(decoder);
+				_values.add(ee);
+			}*/
+
+			decoder.readEndElement();
+
+};
+
+Exclude.prototype.encode=function(/*XMLEncoder*/ encoder)  {
+		if (!validate()) {
+			throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+		}
+		// if everything is null, output nothing
+		if (empty())
+			return;
+		
+		encoder.writeStartElement(getElementLabel());
+
+		/*
+		for (Element element : _values)
+			element.encode(encoder);
+		*/
+
+		encoder.writeEndElement();
+	};
+
+Exclude.prototype.getElementLabel = function() { return CCNProtocolDTags.Exclude; };
+
diff --git a/src/ExcludeAny.js b/src/ExcludeAny.js
new file mode 100644
index 0000000..4fbeb14
--- /dev/null
+++ b/src/ExcludeAny.js
@@ -0,0 +1,21 @@
+
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var ExcludeAny = function ExcludeAny() {
+
+};
+
+exports.ExcludeAny= ExcludeAny;
+
+ExcludeAny.prototype.decode = function(decoder) {
+		decoder.readStartElement(this.getElementLabel());
+		decoder.readEndElement();
+};
+
+
+ExcludeAny.prototype.encode = function( encoder) {
+		encoder.writeStartElement(this.getElementLabel());
+		encoder.writeEndElement();
+};
+
+ExcludeAny.prototype.getElementLabel=function() { return CCNProtocolDTags.Any; };
diff --git a/src/ExcludeComponent.js b/src/ExcludeComponent.js
new file mode 100644
index 0000000..91d6cae
--- /dev/null
+++ b/src/ExcludeComponent.js
@@ -0,0 +1,23 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+/*
+ * _Body is an array of componenets
+ */
+var ExcludeComponent = function ExcludeComponent(_Body) {
+
+	//TODO Check BODY is an Array of componenets.
+	
+	this.Body = _Body
+};
+exports.ExcludeComponent = ExcludeComponent;
+
+ExcludeComponent.prototype.decode = function( decoder)  {
+		body = decoder.readBinaryElement(this.getElementLabel());
+};
+
+ExcludeComponent.prototype.encode = function(encoder) {
+		encoder.writeElement(this.getElementLabel(), body);
+};
+
+ExcludeComponent.prototype.getElementLabel = function() { return CCNProtocolDTags.Component; };
+
diff --git a/src/Interest.js b/src/Interest.js
new file mode 100644
index 0000000..1fd2585
--- /dev/null
+++ b/src/Interest.js
@@ -0,0 +1,128 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var Interest = function Interest(_Name,_MinSuffixComponents,_MaxSuffixComponents,_PublisherPublicKeyDigest, _Exclude, _ChildSelector,_AnswerOriginKind,_Scope,_InterestLifetime,_Nonce){
+	
+	
+	this.Name = _Name;
+	this.MaxSuffixComponents = _MaxSuffixComponents;
+	this.MinSuffixComponents = _MinSuffixComponents;
+	
+	this.PublisherKeyDigest = _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;
+	
+	/*Not sure if the rest is needed*/
+	this.Publisher = _Publisher;
+
+	this.UserTime=_UserTime;
+	
+	this.RECURSIVE_POSTFIX = "*";
+	
+	this.CHILD_SELECTOR_LEFT = 0;
+	this.CHILD_SELECTOR_RIGHT = 1;
+	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.DEFAULT_ANSWER_ORIGIN_KIND = ANSWER_CONTENT_STORE | ANSWER_GENERATED;
+	
+	
+};
+exports.Interest = Interest;
+
+Interest.prototype.decode(/*XMLDecoder*/ decoder) {
+
+		decoder.readStartElement(CCNProtocolDTags.Interest);
+
+		this.Name = new ContentName();
+		this.Name.decode(decoder);
+		
+		if (decoder.peekStartElement(CCNProtocolDTags.MinSuffixComponents)) {
+			this.MinSuffixComponents = decoder.readIntegerElement(CCNProtocolDTags.MinSuffixComponents);
+		}
+		
+		if (decoder.peekStartElement(CCNProtocolDTags.MaxSuffixComponents)) {
+			this.MaxSuffixComponents = decoder.readIntegerElement(CCNProtocolDTags.MaxSuffixComponents);
+		}
+			
+		//TODO something about that guy
+		/*if (PublisherID.peek(decoder)) {
+			this.Publisher = new PublisherID();
+			this.Publisher.decode(decoder);
+		}*/
+
+		if (decoder.peekStartElement(CCNProtocolDTags.Exclude)) {
+			this.Exclude = new Exclude();
+			this.Exclude.decode(decoder);
+		}
+		
+		if (decoder.peekStartElement(CCNProtocolDTags.ChildSelector)) {
+			this.ChildSelector = decoder.readIntegerElement(CCNProtocolDTags.ChildSelector);
+		}
+		
+		if (decoder.peekStartElement(CCNProtocolDTags.AnswerOriginKind)) {
+			// call setter to handle defaulting
+			this.AnswerOriginKind = decoder.readIntegerElement(CCNProtocolDTags.AnswerOriginKind);
+		}
+		
+		if (decoder.peekStartElement(CCNProtocolDTags.Scope)) {
+			this.Scope = decoder.readIntegerElement(CCNProtocolDTags.Scope);
+		}
+
+		if (decoder.peekStartElement(CCNProtocolDTags.InterestLifetime)) {
+			this.InterestLifetime = decoder.readBinaryElement(CCNProtocolDTags.InterestLifetime);
+		}
+		
+		if (decoder.peekStartElement(CCNProtocolDTags.Nonce)) {
+			this.Nonce = decoder.readBinaryElement(CCNProtocolDTags.Nonce);
+		}
+		
+		decoder.readEndElement();
+};
+
+
+Interest.prototype.encode = function(/*XMLEncoder*/ encoder){
+		if (!validate()) {
+			throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+		}
+		
+		encoder.writeStartElement(CCNProtocolDTags.Interest);
+		
+		this.Name.encode(encoder);
+	
+		if (null != this.MinSuffixComponents) 
+			encoder.writeElement(CCNProtocolDTags.MinSuffixComponents, this.MinSuffixComponents);	
+
+		if (null != this.MaxSuffixComponents) 
+			encoder.writeElement(CCNProtocolDTags.MaxSuffixComponents, this.MaxSuffixComponents);
+
+		//TODO
+		
+		/*if (null != this.PublisherID)
+			publisherID().encode(encoder);*/
+		
+		//if (null != this.Exclude)
+			//exclude().encode(encoder);
+
+		if (null != this.ChildSelector) 
+			encoder.writeElement(CCNProtocolDTags.ChildSelector, this.ChildSelector);
+
+		if (this.DEFAULT_ANSWER_ORIGIN_KIND != this.AnswerOriginKind) 
+			encoder.writeElement(CCNProtocolDTags.AnswerOriginKind, this.AnswerOriginKind);
+
+		if (null != this.Scope) 
+			encoder.writeElement(CCNProtocolDTags.Scope, this.Scope);
+		
+		if (null != this.Nonce)
+			encoder.writeElement(CCNProtocolDTags.Nonce, this.Nonce);
+		
+		encoder.writeEndElement();   		
+};
+
+
+
diff --git a/src/KeyLocator.js b/src/KeyLocator.js
new file mode 100644
index 0000000..7d230da
--- /dev/null
+++ b/src/KeyLocator.js
@@ -0,0 +1,119 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var KeyLocatorType = function(){
+	
+};
+
+
+exports.KeyLocatorType = {
+	  NAME:1,
+	  KEY:2,
+	  CERTIFICATE:3
+};
+
+exports.KeyLocatorType =  KeyLocatorType;
+
+var KeyLocator = function KeyLocator(_Input,_Type){ 
+
+    //this.KeyName = _KeyName;
+    //this.PublicKey = _PublicKey;
+    //this.Certificate =  _Certificate;
+    
+    this.Type=_Type;
+    
+    if (_Type==KeyLocatorType.NAME){
+    	this.KeyName = _Input;
+    }
+    else if(_Type==KeyLocatorType.KEY){
+    	this.PublicKey = _Input;
+    }
+    else if(_Type==KeyLocatorType.CERTIFICATE){
+    	this.Certificate = _Input;
+    }
+    
+};
+
+exports.KeyLocator = KeyLocator;
+
+KeyLocator.prototype.decode = function(decoder) {
+
+		decoder.readStartElement(this.getElementLabel());
+
+		if (decoder.peekStartElement(CCNProtocolDTags.Key)) {
+			try {
+				encodedKey = decoder.readBinaryElement(CCNProtocolDTags.Key);
+				// This is a DER-encoded SubjectPublicKeyInfo.
+				
+				//TODO FIX THIS, SHOULDN'T be like that
+				//this.Key =   CryptoUtil.getPublicKey(encodedKey);
+				
+				this.PublicKey = encodedKey;
+				
+				
+			} catch (e) {
+				console.log("Cannot parse stored key: error: " + e);
+				throw new ContentDecodingException("Cannot parse key: ", e);
+			} 
+
+			if (null == Key) {
+				throw new Exception("Cannot parse key: ");
+			}
+			
+		} else if ( decoder.peekStartElement(CCNProtocolDTags.Certificate)) {
+			try {
+				encodedCert = decoder.readBinaryElement(CCNProtocolDTags.Certificate);
+				/*
+				 * Certificates not yet working
+				 */
+				
+				//CertificateFactory factory = CertificateFactory.getInstance("X.509");
+				//this.Certificate = (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(encodedCert));
+				
+			} catch ( e) {
+				throw new Exception("Cannot decode certificate: " +  e);
+			}
+			if (null == this.Certificate) {
+				throw new Exception("Cannot parse certificate! ");
+			}
+		} else {
+			this.KeyName = new KeyName();
+			this.KeyName.decode(decoder);
+		}
+		decoder.readEndElement();
+		}
+	
+
+		KeyLocator.prototype.encode = function( encoder) {
+		/*if (!validate()) {
+			throw new ContentEncodingException("Cannot encode " + this.getClass().getName() + ": field values missing.");
+		}*/
+
+		
+		//TODO FIX THIS TOO
+		encoder.writeStartElement(this.getElementLabel());
+		if (this._Type == KeyLocatorType.KEY) {
+			encoder.writeElement(CCNProtocolDTags.Key, this.PublicKey.getEncoded() );
+			
+		} else if (this.Type == KeyLocatorType.CERTIFICATE) {
+			try {
+				encoder.writeElement(CCNProtocolDTags.Certificate, this.Certificate.getEncoded());
+			} catch ( e) {
+				
+				throw new Exception("CertificateEncodingException attempting to write key locator: " + e);
+			}
+			
+		} else if (this.Type == KeyLocatorType.NAME) {
+			this.KeyName.encode(encoder);
+		}
+		encoder.writeEndElement();
+		
+};
+	
+KeyLocator.prototype.getElementLabel = function() {
+	return CCNProtocolDTags.KeyLocator; 
+};
+
+KeyLocator.prototype.validate = function() {
+	return (  (null != this.keyName) || (null != this.PublicKey) || (null != this.Certificate)   );
+};
+	
\ No newline at end of file
diff --git a/src/KeyName.js b/src/KeyName.js
new file mode 100644
index 0000000..d534944
--- /dev/null
+++ b/src/KeyName.js
@@ -0,0 +1,50 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+
+var KeyName = function KeyName() {
+	
+
+	this.ContentName = this.ContentName;//ContentName
+	this.PublisherID =this.PublisherID;//PublisherID
+
+};
+
+exports.KeyName = KeyName;
+
+KeyName.prototype.decode=function( decoder){
+	
+
+	decoder.readStartElement(this.getElementLabel());
+
+	this.ContentName = new ContentName();
+	this.ContentName.decode(decoder);
+	
+	if (PublisherID.peek(decoder)) {
+		this.PublisherID = new PublisherID();
+		this.PublisherID.decode(decoder);
+	}
+	
+	decoder.readEndElement();
+};
+
+KeyName.prototype.encode = function( encoder) {
+	if (!this.validate()) {
+		throw new Exception("Cannot encode : field values missing.");
+	}
+	
+	encoder.writeStartElement(this.getElementLabel());
+	
+	this.ContentName.encode(encoder);
+	if (null != this.PublisherID)
+		this.PublisherID.encode(encoder);
+
+	encoder.writeEndElement();   		
+};
+	
+KeyName.prototype.getElementLabel = function() { return CCNProtocolDTags.KeyName; };
+
+KeyName.prototype.validate = function() {
+		// DKS -- do we do recursive validation?
+		// null signedInfo ok
+		return (null != this.ContentName);
+};
diff --git a/src/PublisherID.js b/src/PublisherID.js
new file mode 100644
index 0000000..26009da
--- /dev/null
+++ b/src/PublisherID.js
@@ -0,0 +1,76 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+
+var PublisherType = function PublisherType(_tag){
+    	this.KEY =(CCNProtocolDTags.PublisherPublicKeyDigest);
+    	this.CERTIFICATE= (CCNProtocolDTags.PublisherCertificateDigest);
+    	this.ISSUER_KEY=	(CCNProtocolDTags.PublisherIssuerKeyDigest);
+    	this.ISSUER_CERTIFICATE	=(CCNProtocolDTags.PublisherIssuerCertificateDigest);
+
+    	this.Tag = _tag;
+}; exports.PublisherType = PublisherType;
+
+PublisherType.prototype.isTypeTagVal = function(tagVal) {
+		if ((tagVal == CCNProtocolDTags.PublisherPublicKeyDigest) ||
+			(tagVal == CCNProtocolDTags.PublisherCertificateDigest) ||
+			(tagVal == CCNProtocolDTags.PublisherIssuerKeyDigest) ||
+			(tagVal == CCNProtocolDTags.PublisherIssuerCertificateDigest)) {
+			return true;
+		}
+		return false;
+};
+
+
+var PublisherID = function PublisherID() {
+
+	this.PUBLISHER_ID_DIGEST_ALGORITHM = "SHA-256";
+	this.PUBLISHER_ID_LEN = 256/8;
+    
+    
+    this.PublisherID = generatePublicKeyDigest(key);//ByteArray
+    //CryptoUtil.generateKeyID(PUBLISHER_ID_DIGEST_ALGORITHM, key);
+    this.PublisherType = isIssuer ? PublisherType.ISSUER_KEY : PublisherType.KEY;//publisher Type
+    
+};
+
+exports.PublisherID = PublisherID;
+
+PublisherID.prototype.decode = function(decoder) {
+		
+		// We have a choice here of one of 4 binary element types.
+		var nextTag = decoder.peekStartElementAsLong();
+		
+		if (null == nextTag) {
+			throw new Exception("Cannot parse publisher ID.");
+		} 
+		
+		this.PublisherType = new PublisherType(nextTag); 
+		
+		if (!this.PublisherType.isTypeTagVal(nextTag)) {
+			throw new Exception("Invalid publisher ID, got unexpected type: " + nextTag);
+		}
+		this.PublisherID = decoder.readBinaryElement(nextTag);
+		if (null == _publisherID) {
+			throw new ContentDecodingException("Cannot parse publisher ID of type : " + nextTag + ".");
+		}
+};
+
+PublisherID.prototype.encode = function(encoder) {
+	if (!this.validate()) {
+		throw new Exception("Cannot encode " + this.getClass().getName() + ": field values missing.");
+	}
+
+	encoder.writeElement(this.getElementLabel(), this.PublisherID);
+};
+	
+PublisherID.prototype.getElementLabel = function() { 
+	return this.PublisherType.Tag;
+};
+
+	
+PublisherID.prototype.validate = function(){
+	return ((null != id() && (null != type())));
+};
+
+
+
diff --git a/src/PublisherPublicKeyDigest.js b/src/PublisherPublicKeyDigest.js
new file mode 100644
index 0000000..3d3987a
--- /dev/null
+++ b/src/PublisherPublicKeyDigest.js
@@ -0,0 +1,38 @@
+
+var PublisherID = require('./PublisherID').PublisherID;
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var PublisherPublicKeyDigest = function PublisherPublicKeyDigest(_pkd){ 
+	
+ 	 if( typeof _pkd == "ByteArray") this.PublisherPublicKeyDigest = _pkd; // Byte Array
+ 	 else if( typeof _pkd == "PublicKey") ;//TODO...
+    
+};
+
+exports.PublisherPublicKeyDigest = PublisherPublicKeyDigest;
+
+
+PublisherPublicKeyDigest.prototype.decode = function( decoder) {		
+
+		this.PublisherPublicKeyDigest = decoder.readBinaryElement(this.getElementLabel());
+		if (null == this.PublisherPublicKeyDigest) {
+			throw new Exception("Cannot parse publisher key digest.");
+		}
+		if (this.PublisherPublicKeyDigest.length != PublisherID.PUBLISHER_ID_LEN) {
+			
+			this.PublisherPublicKeyDigest = new PublisherPublicKeyDigest(this.PublisherPublicKeyDigest).PublisherKeyDigest;
+		}
+	};
+
+PublisherPublicKeyDigest.prototype.encode= function( encoder) {
+		if (!this.validate()) {
+			throw new Exception("Cannot encode : field values missing.");
+		}
+		this.encoder.writeElement(this.getElementLabel(), this.PublisherKeyDigest);
+};
+	
+PublisherPublicKeyDigest.prototype.getElementLabel = function() { return CCNProtocolDTags.PublisherPublicKeyDigest; };
+
+PublisherPublicKeyDigest.prototype.validate =function() {
+		return (null != this.PublisherKeyDigest);
+};
diff --git a/src/Signature.js b/src/Signature.js
new file mode 100644
index 0000000..d4c3fa4
--- /dev/null
+++ b/src/Signature.js
@@ -0,0 +1,58 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+
+var Signature = function Signature(_Witness,_Signature,_DigestAlgorithm) {
+	
+    this.Witness = _Witness;//byte [] _witness;
+	this.Signature = _Signature;//byte [] _signature;
+	this.DigestAlgorithm = _DigestAlgorithm//String _digestAlgorithm;
+};
+
+exports.Signature = Signature;
+
+
+Signature.prototype.decode =function( decoder) {
+		decoder.readStartElement(this.getElementLabel());
+		if (decoder.peekStartElement(CCNProtocolDTags.DigestAlgorithm)) {
+			this.DigestAlgorithm = decoder.readUTF8Element(CCNProtocolDTags.DigestAlgorithm); 
+		}
+		if (decoder.peekStartElement(CCNProtocolDTags.Witness)) {
+			this.Witness = decoder.readBinaryElement(CCNProtocolDTags.Witness); 
+		}
+		this.Signature = decoder.readBinaryElement(CCNProtocolDTags.SignatureBits);	
+		decoder.readEndElement();
+	
+};
+
+
+exports.Signature = Signature;
+
+Signature.prototype.encode= function( encoder){
+    	
+	if (!this.validate()) {
+		throw new Exception("Cannot encode: field values missing.");
+	}
+	
+	encoder.writeStartElement(this.getElementLabel());
+	
+	if ((null != this.DigestAlgorithm) && (!this.DigestAlgorithm.equals(CCNDigestHelper.DEFAULT_DIGEST_ALGORITHM))) {
+		encoder.writeElement(CCNProtocolDTags.DigestAlgorithm, OIDLookup.getDigestOID(this.DigestAlgorithm));
+	}
+	
+	if (null != this.Witness) {
+		// needs to handle null witness
+		encoder.writeElement(CCNProtocolDTags.Witness, this.Witness);
+	}
+
+	encoder.writeElement(CCNProtocolDTags.SignatureBits, this.Signature);
+
+	encoder.writeEndElement();   		
+};
+
+Signature.prototype.getElementLabel = function() { return CCNProtocolDTags.Signature; };
+
+
+Signature.prototype.validate = function() {
+		return null != this.Signature;
+};
+
diff --git a/src/SignedInfo.js b/src/SignedInfo.js
new file mode 100644
index 0000000..14b72ef
--- /dev/null
+++ b/src/SignedInfo.js
@@ -0,0 +1,106 @@
+var CCNProtocolDTags = require('./CCNProtocolDTags').CCNProtocolDTags;
+
+var SignedInfo = function SignedInfo(_publisher,_timestamp,_type,_locator,_freshnessSeconds,_finalBlockID){
+
+	//TODO, Check types
+    
+    this.Publisher = _publisher; //PublisherPublicKeyDigest
+    this.Timestamp=_timestamp; // CCN Time
+    this.Type=_type; // ContentType
+    this.Locator =_locator;//KeyLocator
+    this.FreshnessSeconds =_freshnessSeconds; // Integer
+    this.FinalBlockID=_finalBlockID; //byte array
+
+};
+
+//exports.SignedInfo.Working;
+
+
+SignedInfo.prototype.decode = function( decoder){
+
+		decoder.readStartElement( this.getElementLabel() );
+		
+		if (decoder.peekStartElement(CCNProtocolDTags.PublisherPublicKeyDigest)) {
+			this.Publisher = new PublisherPublicKeyDigest();
+			this.Publisher.decode(decoder);
+		}
+
+		if (decoder.peekStartElement(CCNProtocolDTags.Timestamp)) {
+			this.Timestamp = decoder.readDateTime(CCNProtocolDTags.Timestamp);
+		}
+
+		if (decoder.peekStartElement(CCNProtocolDTags.Type)) {
+			binType = decoder.readBinaryElement(CCNProtocolDTags.Type);//byte [] 
+			//TODO Implement valueToType
+			
+			this.Type = valueToType(binType);
+			if (null == this.Type) {
+				throw new Exception("Cannot parse signedInfo type: bytes.");
+			}
+			
+		} else {
+			this.Type = ContentType.DATA; // default
+		}
+		
+		if (decoder.peekStartElement(CCNProtocolDTags.FreshnessSeconds)) {
+			this.FreshnessSeconds = decoder.readIntegerElement(CCNProtocolDTags.FreshnessSeconds);
+		}
+		
+		if (decoder.peekStartElement(CCNProtocolDTags.FinalBlockID)) {
+			this.FinalBlockID = decoder.readBinaryElement(CCNProtocolDTags.FinalBlockID);
+		}
+		
+		if (decoder.peekStartElement(CCNProtocolDTags.KeyLocator)) {
+			this.Locator = new KeyLocator();
+			this.Locator.decode(decoder);
+		}
+				
+		decoder.readEndElement();
+};
+
+SignedInfo.prototype.encode = function( encoder)  {
+		if (!this.validate()) {
+			throw new Exception("Cannot encode : field values missing.");
+		}
+		encoder.writeStartElement(this.getElementLabel());
+		
+		if (null!=this.Publisher) {
+			this.Publisher.encode(encoder);
+		}
+
+		if (null!=this.Timestamp) {
+			encoder.writeDateTime(CCNProtocolDTags.Timestamp, this.Timestamp);
+		}
+		
+		if (null!=this.Type) {
+			
+			encoder.writeElement(CCNProtocolDTags.Type, this.Type);
+		}
+		
+		if (null!=this.FreshnessSeconds) {
+			encoder.writeElement(CCNProtocolDTags.FreshnessSeconds, this.FreshnessSeconds);
+		}
+
+		if (null!=this.FinalBlockID) {
+			encoder.writeElement(CCNProtocolDTags.FinalBlockID, this.FinalBlockID);
+		}
+
+		if (null!=this.Locator) {
+			this.Locator.encode(encoder);
+		}
+
+		encoder.writeEndElement();   		
+};
+	
+SignedInfo.prototype.getElementLabel = function() { 
+	return CCNProtocolDTags.SignedInfo;
+};
+
+SignedInfo.prototype.validate = function() {
+		// We don't do partial matches any more, even though encoder/decoder
+		// is still pretty generous.
+		if (null ==this.Publisher || null==this.Timestamp ||null== this.Locator)
+			return false;
+		return true;
+	};
+
diff --git a/src/encoding/BinaryXMLCodec.js b/src/encoding/BinaryXMLCodec.js
new file mode 100644
index 0000000..077c7e2
--- /dev/null
+++ b/src/encoding/BinaryXMLCodec.js
@@ -0,0 +1,135 @@
+
+var XML_EXT = 0x00; 
+	
+var XML_TAG = 0x01; 
+	
+var XML_DTAG = 0x02; 
+	
+var XML_ATTR = 0x03; 
+ 
+var XML_DATTR = 0x04; 
+	
+var XML_BLOB = 0x05; 
+	
+var XML_UDATA = 0x06; 
+	
+var XML_CLOSE = 0x0;
+
+var XML_SUBTYPE_PROCESSING_INSTRUCTIONS = 16; 
+	
+
+var XML_TT_BITS = 3;
+var XML_TT_MASK = ((1 << XML_TT_BITS) - 1);
+var XML_TT_VAL_BITS = XML_TT_BITS + 1;
+var XML_TT_VAL_MASK = ((1 << (XML_TT_VAL_BITS)) - 1);
+var XML_REG_VAL_BITS = 7;
+var XML_REG_VAL_MASK = ((1 << XML_REG_VAL_BITS) - 1);
+var XML_TT_NO_MORE = (1 << XML_REG_VAL_BITS); // 0x80
+var BYTE_MASK = 0xFF;
+var LONG_BYTES = 8;
+var LONG_BITS = 64;
+	
+var bits_11 = 0x0000007FFL;
+var bits_18 = 0x00003FFFFL;
+var bits_32 = 0x0FFFFFFFFL;
+
+
+var TypeAndVal = function TypeAndVal(_type,_val) {
+	this.type = _type;
+	this.val = _val;
+	
+};
+exports.TypeAndVal = TypeAndVal;
+
+var BinaryXMLCodec = function BinaryXMLCodec(){
+	
+	this.CODEC_NAME = "Binary";
+			
+
+
+};
+
+exports.BinaryXMLCodec = BinaryXMLCodec;
+
+
+    
+BinaryXMLCodec.prototype.encodeTypeAndVal = function(
+	//int
+	type,
+	//long
+	val,
+	//byte []
+	buf,
+	//int
+	offset) {
+	
+	if ((type > XML_UDATA) || (type < 0) || (val < 0)) {
+		throw new Exception("Tag and value must be positive, and tag valid.");
+	}
+	
+	// Encode backwards. Calculate how many bytes we need:
+	int numEncodingBytes = numEncodingBytes(val);
+	
+	if ((offset + numEncodingBytes) > buf.length) {
+		throw new Exception("Buffer space of " + (buf.length-offset) + 
+											" bytes insufficient to hold " + 
+											numEncodingBytes + " of encoded type and value.");
+	}
+	
+
+	buf[offset + numEncodingBytes - 1] = 
+		(BYTE_MASK &
+					(((XML_TT_MASK & type) | 
+					 ((XML_TT_VAL_MASK & val) << XML_TT_BITS))) |
+					 XML_TT_NO_MORE); 
+	val = val >>> XML_TT_VAL_BITS;;
+
+	int i = offset + numEncodingBytes - 2;
+	while ((0 != val) && (i >= offset)) {
+		buf[i] = (BYTE_MASK &
+						    (val & XML_REG_VAL_MASK)); 
+		val = val >>> XML_REG_VAL_BITS;
+		--i;
+	}
+	
+	return numEncodingBytes;
+};
+	
+BinaryXMLCodec.prototype.decodeTypeAndVal = function(
+		/*InputStream*/
+		istream) {
+	
+	int next;
+	int type = -1;
+	long val = 0;
+	boolean more = true;
+
+	do {
+		next = istream.read();
+		
+		if (next < 0) {
+			return null; 
+		}
+
+		if ((0 == next) && (0 == val)) {
+			return null;
+		}
+		
+		more = (0 == (next & XML_TT_NO_MORE));
+		
+		if  (more) {
+			val = val << XML_REG_VAL_BITS;
+			val |= (next & XML_REG_VAL_MASK);
+		} else {
+
+			type = next & XML_TT_MASK;
+			val = val << XML_TT_VAL_BITS;
+			val |= ((next >>> XML_TT_BITS) & XML_TT_VAL_MASK);
+		}
+		
+	} while (more);
+	
+	return new TypeAndVal(type, val);
+};
+
+//TODO
\ No newline at end of file
diff --git a/src/encoding/BinaryXMLDecoder.js b/src/encoding/BinaryXMLDecoder.js
new file mode 100644
index 0000000..4a8b1c4
--- /dev/null
+++ b/src/encoding/BinaryXMLDecoder.js
@@ -0,0 +1,89 @@
+var MARK_LEN=512;
+var DEBUG_MAX_LEN =  32768;
+
+var BinaryXMLDecoder = new BinaryXMLDecoder(_Istream){
+	this.Istream = _Istream;
+	
+};
+
+
+BinaryXMLDecoder.prototype.readStartElement =function(
+	//String
+	startTag,				    
+	//TreeMap<String, String>
+	attributes) {
+
+	try {
+		BinaryXMLCodec.TypeAndVal tv = BinaryXMLCodec.decodeTypeAndVal(this.Istream);
+		
+		if (null == tv) {
+			throw new Exception("Expected start element: " + startTag + " got something not a tag.");
+		}
+		
+		String decodedTag = null;
+		
+		if (tv.type() == BinaryXMLCodec.XML_TAG) {
+			
+			decodedTag = BinaryXMLCodec.decodeUString(this.Istream, tv.val()+1);
+			
+		} else if (tv.type() == BinaryXMLCodec.XML_DTAG) {
+			decodedTag = tagToString(tv.val());	
+		}
+		
+		if ((null ==  decodedTag) || (!decodedTag.equals(startTag))) {
+			throw new Exception("Expected start element: " + startTag + " got: " + decodedTag + "(" + tv.val() + ")");
+		}
+		
+		if (null != attributes) {
+			readAttributes(attributes); 
+		}
+		
+	} catch (e) {
+		throw new Exception("readStartElement", e);
+	}
+};
+
+BinaryXMLDecoder.prototype.readAttributes = function(
+	//TreeMap<String,String> 
+	attributes){
+	
+	if (null == attributes) {
+		return;
+	}
+
+	try {
+
+		BinaryXMLCodec.TypeAndVal nextTV = BinaryXMLCodec.peekTypeAndVal(_istream);
+
+		while ((null != nextTV) && ((BinaryXMLCodec.XML_ATTR == nextTV.type()) ||
+				(BinaryXMLCodec.XML_DATTR == nextTV.type()))) {
+
+			BinaryXMLCodec.TypeAndVal thisTV = BinaryXMLCodec.decodeTypeAndVal(this.Istream);
+
+			var attributeName = null;
+			if (BinaryXMLCodec.XML_ATTR == thisTV.type()) {
+				
+				attributeName = BinaryXMLCodec.decodeUString(_istream, thisTV.val()+1);
+
+			} else if (BinaryXMLCodec.XML_DATTR == thisTV.type()) {
+				// DKS TODO are attributes same or different dictionary?
+				attributeName = tagToString(thisTV.val());
+				if (null == attributeName) {
+					throw new ContentDecodingException("Unknown DATTR value" + thisTV.val());
+				}
+			}
+			
+			var attributeValue = BinaryXMLCodec.decodeUString(_istream);
+
+			attributes.put(attributeName, attributeValue);
+
+			nextTV = BinaryXMLCodec.peekTypeAndVal(_istream);
+		}
+
+	} catch ( e) {
+
+		throw new ContentDecodingException("readStartElement", e);
+	}
+};
+
+//TODO
\ No newline at end of file
diff --git a/src/encoding/BinaryXMLEncoder.js b/src/encoding/BinaryXMLEncoder.js
new file mode 100644
index 0000000..7ccf3b4
--- /dev/null
+++ b/src/encoding/BinaryXMLEncoder.js
@@ -0,0 +1,31 @@
+
+var BinaryXMLEncoder = function BinaryXMLEncoder(){
+	
+BinaryXMLEncoder.prototype.writeStartElement = function(
+		//String 
+		tag, 
+		//TreeMap<String,String> 
+		attributes){
+	
+}
+	try {
+		var dictionaryVal = stringToTag(tag);
+		
+		if (null == dictionaryVal) {
+			BinaryXMLCodec.encodeUString(_ostream, tag, BinaryXMLCodec.XML_TAG);
+			
+		} else {
+			BinaryXMLCodec.encodeTypeAndVal(BinaryXMLCodec.XML_DTAG, dictionaryVal, _ostream);
+		}
+		
+		if (null != attributes) {
+			writeAttributes(attributes); 
+		}
+		
+	} catch (e) {
+		throw new Exception(e);
+	}
+};
+
+
+//TODO
\ No newline at end of file
diff --git a/src/encoding/TextXMLCodec.js b/src/encoding/TextXMLCodec.js
new file mode 100644
index 0000000..ea64188
--- /dev/null
+++ b/src/encoding/TextXMLCodec.js
@@ -0,0 +1 @@
+//TODO
\ No newline at end of file
diff --git a/src/encoding/TextXMLDecoder.js b/src/encoding/TextXMLDecoder.js
new file mode 100644
index 0000000..ea64188
--- /dev/null
+++ b/src/encoding/TextXMLDecoder.js
@@ -0,0 +1 @@
+//TODO
\ No newline at end of file
diff --git a/src/encoding/TextXMLEncoder.js b/src/encoding/TextXMLEncoder.js
new file mode 100644
index 0000000..ea64188
--- /dev/null
+++ b/src/encoding/TextXMLEncoder.js
@@ -0,0 +1 @@
+//TODO
\ No newline at end of file
diff --git a/test/RandomTest.js b/test/RandomTest.js
new file mode 100644
index 0000000..5096382
--- /dev/null
+++ b/test/RandomTest.js
@@ -0,0 +1,14 @@
+console.log("HELLO");
+
+require('../src/CCNProtocolDTags');
+
+
+var RandomTest = function RandomTest(){
+	
+	
+	this.a = 6;
+};
+
+RandomTest.prototype.d = function(){
+	console.log(a);
+};
diff --git a/test/test-data/.DS_Store b/test/test-data/.DS_Store
new file mode 100644
index 0000000..dff3c06
--- /dev/null
+++ b/test/test-data/.DS_Store
Binary files differ
diff --git a/test/test-data/ContentObject1.binary b/test/test-data/ContentObject1.binary
new file mode 100644
index 0000000..9377cf9
--- /dev/null
+++ b/test/test-data/ContentObject1.binary
@@ -0,0 +1 @@
+a03b2088587b7b14e1b1b04156203f92702759dda531d680816fe5708e842002ba967e14b7cfe8c19d2da1b550e18277947925deac3395d02a2d3f116b2314f1cc69aab4fab1afe71c56ad6e239b8f61ab00029bb09452895fc44b37955cf50775b349ef9883739c23aaf0b86892fcb4626df2f00e8c9edfcb83160fe9a014162a9fed5bc0000f2faad68656c6c6f000001a203e20285204874045a9fac98ebb7dfadc4bbd1ab15a6e4065349c6c83a8460844eab31850002bab504f32b9ca3a20001e201da0a9530819f300d06092a864886f70d010101050003818d0030818902818100bd9565559c1795c049a5ef4dc9d1bc8b981b66097ea253f5d0f50f1a1df908ac4e69a797dadd2c0590944a6e849e1fbb7371c53dfddbe7802656e1d5f449b8530d9c7da8d6abebd90e06124d927f2f6c5721f1d0e49e7f6a1167caf960d96ff5afaa2d2567337772a944c8e6ceb859b25a231d9eca873574ff98225c853f38ef0203010001000000019ae568656c6c6f20776f726c640a0000
\ No newline at end of file
diff --git a/test/test-data/ContentObject1.xml b/test/test-data/ContentObject1.xml
new file mode 100644
index 0000000..46e32b8
--- /dev/null
+++ b/test/test-data/ContentObject1.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">h7exThsbBBViA/knAnWd2lMdaAgW/lcI6EIAK6ln4Ut8/owZ0tobVQ4YJ3lHkl3q
+wzldAqLT8RayMU8cxpqrT6sa/nHFatbiObj2GrAAKbsJRSiV/ESzeVXPUHdbNJ75
+iDc5wjqvC4aJL8tGJt8vAOjJ7fy4MWD+mgFBYqn+1bw=</SignatureBits></Signature><Name><Component ccnbencoding="text">hello</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPMrnKOi</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">aGVsbG8gd29ybGQK</Content></ContentObject>
diff --git a/test/test-data/ContentObject2.binary b/test/test-data/ContentObject2.binary
new file mode 100644
index 0000000..63865cb
--- /dev/null
+++ b/test/test-data/ContentObject2.binary
Binary files differ
diff --git a/test/test-data/ContentObject2.xml b/test/test-data/ContentObject2.xml
new file mode 100644
index 0000000..a7b7476
--- /dev/null
+++ b/test/test-data/ContentObject2.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">E1XOBbKmN0rqOvNFZA9+gPE491gMThGbmYGIkvkIQc+1WEIXX/li3Wnzj3s2oVlF
+txzj6j/+kNHWuV7SMhTX8mL31zGl+iyuXVjshQKBYBYk9VN1b0aFw2C8LE4OOjmR
+O8tt5fCFxJ8Hqx4/iwzpJYctQDNyOLDq68AJsIPQefg=</SignatureBits></Signature><Name><Component ccnbencoding="text">hello</Component><Component ccnbencoding="text">world</Component><Component ccnbencoding="text">ucla</Component><Component ccnbencoding="text">cs</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPP0hkOL</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
+QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkJC
+QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJC
+QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJDCg==</Content></ContentObject>
diff --git a/test/test-data/ContentObject3.binary b/test/test-data/ContentObject3.binary
new file mode 100644
index 0000000..6ea5d7c
--- /dev/null
+++ b/test/test-data/ContentObject3.binary
Binary files differ
diff --git a/test/test-data/ContentObject3.xml b/test/test-data/ContentObject3.xml
new file mode 100644
index 0000000..30c4bed
--- /dev/null
+++ b/test/test-data/ContentObject3.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">HErd+7ZgsZTvR3f0pq066b1rk/GIVGJn+3CgLsjmUTAd2Zppd4TANGIM8xW5O8L2
+ToC0Jpr5HP3NkPG5jPyouinWlE8yLgmdMzpiyd9UtAoaIJtbNVknMDH/e25/PvF9
+y/OsM3r5I2IJAsnW5TIkPnTL1hUkTJxLKV8By0xZf18=</SignatureBits></Signature><Name><Component ccnbencoding="text">test3</Component><Component ccnbencoding="text">testing</Component><Component ccnbencoding="text">435b</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPP0ntsw</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">IAo=</Content></ContentObject>
diff --git a/test/test-data/ContentObject4.binary b/test/test-data/ContentObject4.binary
new file mode 100644
index 0000000..63865cb
--- /dev/null
+++ b/test/test-data/ContentObject4.binary
Binary files differ
diff --git a/test/test-data/ContentObject4.xml b/test/test-data/ContentObject4.xml
new file mode 100644
index 0000000..a7b7476
--- /dev/null
+++ b/test/test-data/ContentObject4.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">E1XOBbKmN0rqOvNFZA9+gPE491gMThGbmYGIkvkIQc+1WEIXX/li3Wnzj3s2oVlF
+txzj6j/+kNHWuV7SMhTX8mL31zGl+iyuXVjshQKBYBYk9VN1b0aFw2C8LE4OOjmR
+O8tt5fCFxJ8Hqx4/iwzpJYctQDNyOLDq68AJsIPQefg=</SignatureBits></Signature><Name><Component ccnbencoding="text">hello</Component><Component ccnbencoding="text">world</Component><Component ccnbencoding="text">ucla</Component><Component ccnbencoding="text">cs</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPP0hkOL</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
+QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkJC
+QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJC
+QkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJDCg==</Content></ContentObject>
diff --git a/test/test-data/ContentObject5.binary b/test/test-data/ContentObject5.binary
new file mode 100644
index 0000000..0ed03a6
--- /dev/null
+++ b/test/test-data/ContentObject5.binary
Binary files differ
diff --git a/test/test-data/ContentObject5.xml b/test/test-data/ContentObject5.xml
new file mode 100644
index 0000000..e408d40
--- /dev/null
+++ b/test/test-data/ContentObject5.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">SLkD3PxyF38CYiAZHBMWggs357uW2JPkrLfgaKzqnn/lvBsHRq4GntKH3TveSh2O
+xModFj/MF/rmnKdvwEojg6Y0G3BIvJ01eNf97phe/gu1WPKzTkHyIfgS5krJIz4w
+N4JfbhHIO97+FExSCTdRF7276EKvoEuzjcIVZrTJTNU=</SignatureBits></Signature><Name><Component ccnbencoding="text">uri1</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPP0ygle</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">TWVzc2FnZQo=</Content></ContentObject>
diff --git a/test/test-data/ContentObject6.binary b/test/test-data/ContentObject6.binary
new file mode 100644
index 0000000..c89edfb
--- /dev/null
+++ b/test/test-data/ContentObject6.binary
Binary files differ
diff --git a/test/test-data/ContentObject6.xml b/test/test-data/ContentObject6.xml
new file mode 100644
index 0000000..897869b
--- /dev/null
+++ b/test/test-data/ContentObject6.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ContentObject><Signature><SignatureBits ccnbencoding="base64Binary">T9vjIhsEnnw4OAX2QHe0Zx9TEHLELm51YLxPDXxQy2EMET89KuXT7fEK6r3Ignu7
+z4lgtWw39ds0NhAjZW1s2aVNntZooLiN+VzLsIlPgVCSlbASqqmCSXQO45SvuKvm
+mog24sW3heJLAg15Y1XLuPLouZJvetu5xpsG9N9TUCg=</SignatureBits></Signature><Name><Component ccnbencoding="text">uri2</Component></Name><SignedInfo><PublisherPublicKeyDigest ccnbencoding="base64Binary">IEh0BFqfrJjrt9+txLvRqxWm5AZTScbIOoRghE6rMYU=</PublisherPublicKeyDigest><Timestamp ccnbencoding="base64Binary">BPP0z9ZL</Timestamp><KeyLocator><Key ccnbencoding="base64Binary">MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9lWVVnBeVwEml703J0byLmBtm
+CX6iU/XQ9Q8aHfkIrE5pp5fa3SwFkJRKboSeH7tzccU9/dvngCZW4dX0SbhTDZx9
+qNar69kOBhJNkn8vbFch8dDknn9qEWfK+WDZb/Wvqi0lZzN3cqlEyObOuFmyWiMd
+nsqHNXT/mCJchT847wIDAQAB</Key></KeyLocator></SignedInfo><Content ccnbencoding="base64Binary">TWVzc2FnZQo=</Content></ContentObject>
diff --git a/test/test-data/ContentObject7.binary b/test/test-data/ContentObject7.binary
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/test-data/ContentObject7.binary
diff --git a/test/test-data/ContentObject7.xml b/test/test-data/ContentObject7.xml
new file mode 100644
index 0000000..12bbf74
--- /dev/null
+++ b/test/test-data/ContentObject7.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?>
diff --git a/test/test-data/InterestMessage1.binary b/test/test-data/InterestMessage1.binary
new file mode 100644
index 0000000..7482bab
--- /dev/null
+++ b/test/test-data/InterestMessage1.binary
Binary files differ
diff --git a/test/test-data/InterestMessage1.xml b/test/test-data/InterestMessage1.xml
new file mode 100644
index 0000000..2708f0e
--- /dev/null
+++ b/test/test-data/InterestMessage1.xml
@@ -0,0 +1,6 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<Interest xmlns:ccn="http://www.parc.com/ccn">
+  <Name>
+    <Component>dGVzdDE=</Component>
+  </Name>
+</Interest>
\ No newline at end of file
diff --git a/test/test-data/InterestMessage2.binary b/test/test-data/InterestMessage2.binary
new file mode 100644
index 0000000..51b98ea
--- /dev/null
+++ b/test/test-data/InterestMessage2.binary
Binary files differ
diff --git a/test/test-data/InterestMessage2.xml b/test/test-data/InterestMessage2.xml
new file mode 100644
index 0000000..1d1dff5
--- /dev/null
+++ b/test/test-data/InterestMessage2.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>

+<Interest xmlns:ccn="http://www.parc.com/ccn">

+  <Name>

+    <Component>dGVzdDI=</Component>

+  </Name>

+  <MinSuffixComponents>1</MinSuffixComponents>

+  <MaxSuffixComponents>3</MaxSuffixComponents>

+</Interest>
diff --git a/test/test-data/InterestMessage3.binary b/test/test-data/InterestMessage3.binary
new file mode 100644
index 0000000..e336ca1
--- /dev/null
+++ b/test/test-data/InterestMessage3.binary
Binary files differ
diff --git a/test/test-data/InterestMessage3.xml b/test/test-data/InterestMessage3.xml
new file mode 100644
index 0000000..5592218
--- /dev/null
+++ b/test/test-data/InterestMessage3.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>

+<Interest xmlns:ccn="http://www.parc.com/ccn">

+  <Name>

+    <Component>dGVzdDM=</Component>

+    <Component>dGVzdDMtbGF5ZXIy</Component>

+    <Component>MTIzNDU2IUA=</Component>

+  </Name>

+</Interest>