diff --git a/js/encoding/BinaryXMLDecoder.js b/js/encoding/BinaryXMLDecoder.js
index bf8597b..675a876 100644
--- a/js/encoding/BinaryXMLDecoder.js
+++ b/js/encoding/BinaryXMLDecoder.js
@@ -65,7 +65,9 @@
 	return null;
 };
 
-//console.log(stringToTag(64));
+/**
+ * @constructor
+ */
 var BinaryXMLDecoder = function BinaryXMLDecoder(input){
 	var MARK_LEN=512;
 	var DEBUG_MAX_LEN =  32768;
@@ -380,7 +382,7 @@
 	};
 	
 
-/*
+/**
  * Read a blob as well as the end element. Returns a Uint8Array (or null for missing blob).
  * If the blob is missing and allowNull is false (default), throw an exception.  Otherwise,
  *   just read the end element and return null.
@@ -564,9 +566,6 @@
 	return this.v;
 };
 
-
-
-
 BinaryXMLDecoder.prototype.readIntegerElement =function(
 	//String 
 	startTag) {
@@ -580,7 +579,6 @@
 	return parseInt(strVal);
 };
 
-
 BinaryXMLDecoder.prototype.readUTF8Element =function(
 			//String 
 			startTag,
@@ -594,8 +592,7 @@
 		return strElementText;
 };
 
-
-/* 
+/**
  * Set the offset into the input, used for the next read.
  */
 BinaryXMLDecoder.prototype.seek = function(
diff --git a/js/encoding/BinaryXMLEncoder.js b/js/encoding/BinaryXMLEncoder.js
index 99a1ad2..517abca 100644
--- a/js/encoding/BinaryXMLEncoder.js
+++ b/js/encoding/BinaryXMLEncoder.js
@@ -39,14 +39,16 @@
 var bits_18 = 0x00003FFFF;
 var bits_32 = 0x0FFFFFFFF;
 
-
+/**
+ * @constructor
+ */
 var BinaryXMLEncoder = function BinaryXMLEncoder(){
 	this.ostream = new DynamicUint8Array(100);
 	this.offset =0;
 	this.CODEC_NAME = "Binary";
 };
 
-/*
+/**
  * Encode utf8Content as utf8.
  */
 BinaryXMLEncoder.prototype.writeUString = function(/*String*/ utf8Content) {
@@ -142,7 +144,7 @@
 	return null;
 };
 
-/*
+/**
  * If Content is a string, then encode as utf8 and write UDATA.
  */
 BinaryXMLEncoder.prototype.writeElement = function(
@@ -234,7 +236,7 @@
 	return numEncodingBytes;
 };
 
-/*
+/**
  * Encode ustring as utf8.
  */
 BinaryXMLEncoder.prototype.encodeUString = function(
diff --git a/js/encoding/BinaryXMLStructureDecoder.js b/js/encoding/BinaryXMLStructureDecoder.js
index 9b99fd5..19f7ceb 100644
--- a/js/encoding/BinaryXMLStructureDecoder.js
+++ b/js/encoding/BinaryXMLStructureDecoder.js
@@ -6,6 +6,9 @@
  * See COPYING for copyright and distribution information.
  */
 
+/**
+ * @constructor
+ */
 var BinaryXMLStructureDecoder = function BinaryXMLDecoder() {
     this.gotElementEnd = false;
     this.offset = 0;
@@ -20,7 +23,7 @@
 BinaryXMLStructureDecoder.READ_HEADER_OR_CLOSE = 0;
 BinaryXMLStructureDecoder.READ_BYTES = 1;
 
-/*
+/**
  * Continue scanning input starting from this.offset.  If found the end of the element
  *   which started at offset 0 then return true, else false.
  * If this returns false, you should read more into input and call again.
@@ -148,20 +151,18 @@
     }
 };
 
-/*
+/**
  * Set the state to READ_HEADER_OR_CLOSE and set up to start reading the header
  */
 BinaryXMLStructureDecoder.prototype.startHeader = function() {
-    this.headerLength = 0;
-    this.useHeaderBuffer = false;
-    this.state = BinaryXMLStructureDecoder.READ_HEADER_OR_CLOSE;    
+  this.headerLength = 0;
+  this.useHeaderBuffer = false;
+  this.state = BinaryXMLStructureDecoder.READ_HEADER_OR_CLOSE;    
 }
 
-/*
+/**
  *  Set the offset into the input, used for the next read.
  */
-BinaryXMLStructureDecoder.prototype.seek = function(
-        //int
-        offset) {
-    this.offset = offset;
+BinaryXMLStructureDecoder.prototype.seek = function(offset) {
+  this.offset = offset;
 }
diff --git a/js/encoding/BinaryXMLWireFormat.js b/js/encoding/BinaryXMLWireFormat.js
index 8dbe3a2..b4859a0 100644
--- a/js/encoding/BinaryXMLWireFormat.js
+++ b/js/encoding/BinaryXMLWireFormat.js
@@ -6,6 +6,7 @@
 
 /**
  * A BinaryXMLWireFormat implements the WireFormat interface for encoding and decoding in binary XML.
+ * @constructor
  */
 var BinaryXMLWireFormat = function BinaryXMLWireFormat() {
 };
diff --git a/js/encoding/DynamicUint8Array.js b/js/encoding/DynamicUint8Array.js
index 5bf0080..802b5c2 100644
--- a/js/encoding/DynamicUint8Array.js
+++ b/js/encoding/DynamicUint8Array.js
@@ -4,11 +4,12 @@
  * Encapsulate an Uint8Array and support dynamic reallocation.
  */
 
-/*
+/**
  * Create a DynamicUint8Array where this.array is a Uint8Array of size length.
- * If length is not supplied, use a default initial length.
  * The methods will update this.length.
  * To access the array, use this.array or call subarray.
+ * @constructor
+ * @param {number} length the initial length of the array.  If null, use a default.
  */
 var DynamicUint8Array = function DynamicUint8Array(length) {
 	if (!length)
@@ -18,7 +19,7 @@
     this.length = length;
 };
 
-/*
+/**
  * Ensure that this.array has the length, reallocate and copy if necessary.
  * Update this.length which may be greater than length.
  */
@@ -38,7 +39,7 @@
     this.length = newLength;
 };
 
-/*
+/**
  * Call this.array.set(value, offset), reallocating if necessary. 
  */
 DynamicUint8Array.prototype.set = function(value, offset) {
@@ -46,9 +47,9 @@
     this.array.set(value, offset);
 };
 
-/*
+/**
  * Return this.array.subarray(begin, end);
  */
 DynamicUint8Array.prototype.subarray = function(begin, end) {
     return this.array.subarray(begin, end);
-}
+};
diff --git a/js/encoding/EncodingUtils.js b/js/encoding/EncodingUtils.js
index 02f0b3a..0715f27 100644
--- a/js/encoding/EncodingUtils.js
+++ b/js/encoding/EncodingUtils.js
@@ -8,7 +8,9 @@
   return DataUtils.toHex(interest.encode());
 }
 
-// Deprecated: Use interest.encode().
+/**
+ * @deprecated Use interest.encode().
+ */
 function encodeToBinaryInterest(interest) {
   return interest.encode();
 }
@@ -17,7 +19,9 @@
   return DataUtils.toHex(contentObject.encode());
 }
 
-// Deprecated: Use contentObject.encode().
+/**
+ * @deprecated Use contentObject.encode().
+ */
 function encodeToBinaryContentObject(contentObject) {
   contentObject.encode();
 }
@@ -80,7 +84,7 @@
 	
 }
 
-/*
+/**
  * Decode the Uint8Array which holds SubjectPublicKeyInfo and return an RSAKey.
  */
 function decodeSubjectPublicKeyInfo(array) {
@@ -91,8 +95,9 @@
     return rsaKey;
 }
 
-/* Return a user friendly HTML string with the contents of co.
-   This also outputs to console.log.
+/**
+ * Return a user friendly HTML string with the contents of co.
+ * This also outputs to console.log.
  */
 function contentObjectToHtml(/* ContentObject */ co) {
     var output ="";
diff --git a/js/encoding/MimeTypes.js b/js/encoding/MimeTypes.js
index 9689355..ef17849 100644
--- a/js/encoding/MimeTypes.js
+++ b/js/encoding/MimeTypes.js
@@ -4,8 +4,11 @@
  * See COPYING for copyright and distribution information.
  */
  
+/**
+ * MimeTypes contains a mapping of filename extension to MIME type, and a function getContentTypeAndCharset to select it.
+ */
 var MimeTypes = {
-  /*
+  /**
    * Based on filename, return an object with properties contentType and charset.
    */
   getContentTypeAndCharset: function(filename) {      
