diff --git a/js/encoding/BinaryXMLDecoder.js b/js/encoding/BinaryXMLDecoder.js
index f70cca4..92e81f1 100644
--- a/js/encoding/BinaryXMLDecoder.js
+++ b/js/encoding/BinaryXMLDecoder.js
@@ -641,7 +641,6 @@
 var TypeAndVal = function TypeAndVal(_type,_val) {
 	this.t = _type;
 	this.v = _val;
-	
 };
 
 TypeAndVal.prototype.type = function(){
diff --git a/js/encoding/BinaryXMLEncoder.js b/js/encoding/BinaryXMLEncoder.js
index f05a869..a4217ff 100644
--- a/js/encoding/BinaryXMLEncoder.js
+++ b/js/encoding/BinaryXMLEncoder.js
@@ -21,7 +21,7 @@
 var XML_CLOSE = 0x0;
 
 var XML_SUBTYPE_PROCESSING_INSTRUCTIONS = 16; 
-	
+
 
 var XML_TT_BITS = 3;
 var XML_TT_MASK = ((1 << XML_TT_BITS) - 1);
@@ -57,7 +57,9 @@
 BinaryXMLEncoder.prototype.writeBlob = function(/*byte []*/ binaryContent
 		//, /*int*/ offset, /*int*/ length
 		)  {
-	console.log(binaryContent);
+	
+	if(LOG >3) console.log(binaryContent);
+	
 	this.encodeBlob(this.ostream, binaryContent, this.offset, binaryContent.length);
 };
 
@@ -144,13 +146,30 @@
 		//long 
 		tag, 
 		//byte[] 
-		binaryContent,
+		Content,
 		//TreeMap<String, String> 
 		attributes) {
 	this.writeStartElement(tag, attributes);
 	// Will omit if 0-length
 	
-	this.writeBlob(binaryContent);
+	if(typeof Content === 'number') {
+		if(LOG>4) console.log('GOING TO WRITE THE NUMBER ' +Content );
+		this.writeBlob(Content.toString());
+		//whatever
+		
+	}
+	
+	else{
+	//else if(typeof Content === 'string'){
+		console.log('went here');
+		//this.writeBlob(Content);
+	//}
+	
+	//else if(typeof Content === 'object'){
+		this.writeBlob(Content);
+	//}
+	}
+	
 	this.writeEndElement();
 }
 
@@ -314,11 +333,19 @@
 		//CCNTime 
 		offset) {
 	
-	
-	for (var i = 0; i < input.length; i++) {
-	    this.ostream[this.offset+i] = (input.charCodeAt(i));
+    if(typeof input === 'string'){
+		//console.log('went here');
+    	if(LOG>4) console.log('GOING TO WRITE A STRING');
+    
+		for (var i = 0; i < input.length; i++) {
+		    this.ostream[this.offset+i] = (input.charCodeAt(i));
+		}
 	}
-	
+    
+	else if(typeof input === 'object'){
+		this.writeBlobArray(input);
+	}	
+
 };
 
 BinaryXMLEncoder.prototype.writeBlobArray = function(
@@ -327,11 +354,16 @@
 		//CCNTime 
 		offset) {
 	
+	if(LOG>4) console.log('GOING TO WRITE A BLOB');
+    
 	for (var i = 0; i < Blob.length; i++) {
 	    this.ostream[this.offset+i] = Blob[i];
 	}
 	
 };
+
+
+
 BinaryXMLEncoder.prototype.getReducedOstream = function() {
 	
 	return this.ostream.slice(0,this.offset);
diff --git a/js/encoding/DataUtils.js b/js/encoding/DataUtils.js
index 92a4257..635cac7 100644
--- a/js/encoding/DataUtils.js
+++ b/js/encoding/DataUtils.js
@@ -97,10 +97,6 @@
 
      return unescape(output);
   };
-  
-  
-
-
 
 //byte [] 
 DataUtils.prototype.unsignedLongToByteArray= function( value) {
@@ -133,5 +129,29 @@
 }
 
 
+var utf8 = {}
+
+utf8.toByteArray = function(str) {
+    var byteArray = [];
+    for (var i = 0; i < str.length; i++)
+        if (str.charCodeAt(i) <= 0x7F)
+            byteArray.push(str.charCodeAt(i));
+        else {
+            var h = encodeURIComponent(str.charAt(i)).substr(1).split('%');
+            for (var j = 0; j < h.length; j++)
+                byteArray.push(parseInt(h[j], 16));
+        }
+    return byteArray;
+};
+
+utf8.parse = function(byteArray) {
+    var str = '';
+    for (var i = 0; i < byteArray.length; i++)
+        str +=  byteArray[i] <= 0x7F?
+                byteArray[i] === 0x25 ? "%25" : // %
+                String.fromCharCode(byteArray[i]) :
+                "%" + byteArray[i].toString(16).toUpperCase();
+    return decodeURIComponent(str);
+};
 
 
