diff --git a/src/proxy/stream.js b/src/proxy/stream.js
index e07da67..fcb2b67 100644
--- a/src/proxy/stream.js
+++ b/src/proxy/stream.js
@@ -21,11 +21,25 @@
   require('../gen-vdl/v.io/x/ref/services/wspr/internal/lib').ServerRpcReply;
 
 /**
- * A stream that allows sending and receiving data for a streaming rpc.  If
- * onmessage is set and a function, it will be called whenever there is data on.
- * the stream. The stream implements the promise api.  When the rpc is complete,
- * the stream will be fulfilled.  If there is an error, then the stream will be
- * rejected.  This constructor should not be directly called.
+ * @summary
+ * A stream that allows sending and receiving data for a streaming rpc.
+ * @description
+ * <p>Stream is a
+ * [Duplex Node.js stream]{@link https://nodejs.org/api/stream.html}
+ * in 'objectMode'.
+ * This constructor should not be directly called.</p>
+ *
+ * <p>If a 'data' event handler is specified, it will be called with data as
+ * they become available.
+ * <pre>
+ *  stream.on('data', function(obj) {
+ *    console.log(obj);
+ *  });
+ * </pre></p>
+ * <p>
+ * All other [Node.js stream]{@link https://nodejs.org/api/stream.html} events,
+ * properties and function are also available on this stream as well.
+ * </p>
  * @constructor
  * @inner
  * @memberof module:vanadium.rpc
@@ -116,6 +130,7 @@
 
 /**
  * Queue the close signal onto the Duplex's queue.
+ * @private
  */
 Stream.prototype._queueClose = function() {
   this._queueData(null);
@@ -123,6 +138,7 @@
 
 /**
  * Queues the data onto the Duplex's queue.
+ * @private
  */
 Stream.prototype._queueData = function(data) {
   if (this.shouldQueue) {
@@ -137,9 +153,9 @@
 /**
  * Writes an object to the stream.
  * @param {*} chunk The data to write to the stream.
- * @param {null} encoding ignored for object streams.
- * @param {function} cb if set, the function to call when the write
- * completes.
+ * @param {string} [encoding=null] ignored for object streams.
+ * @param {module:vanadium~voidCb} cb If set, the function to call when the
+ * write completes.
  * @return {boolean} Returns false if the write buffer is full.
  */
 Stream.prototype.write = function(chunk, encoding, cb) {
@@ -171,9 +187,9 @@
 /**
  * Writes an optional object to the stream and ends the stream.
  * @param {*} chunk The data to write to the stream.
- * @param {null} encoding ignored for object streams.
- * @param {function} cb if set, the function to call when the write
- * completes.
+ * @param {string} [encoding=null] Ignored for object streams.
+ * @param {module:vanadium~voidCb} cb If set, the function to call when the
+ * end call completes.
  */
 Stream.prototype.end = function(chunk, encoding, cb) {
   if (this.isClient) {
diff --git a/src/rpc/client.js b/src/rpc/client.js
index 2096aa8..1a2d20f 100644
--- a/src/rpc/client.js
+++ b/src/rpc/client.js
@@ -336,11 +336,12 @@
   'arguments. Expected format: {5}({6})');
 
 /**
- * A callbacked that is called when
+ * A callback that is called when
  * [bindTo]{@link module:vanadium.rpc~Client#bindTo} finishes.
  * @callback module:vanadium.rpc~Client~bindToCb
- * @param {error} err If set the error that occured.
- * @param {object} service The service object containing the exported methods.
+ * @param {Error} err If set the error that occurred.
+ * @param {object} service The stub object containing the exported
+ * methods of the remote service.
  */
 /**
  * <p>Performs client side binding of a remote service to a native JavaScript
@@ -359,10 +360,11 @@
  * });
  * </pre>
  * @param {module:vanadium.context.Context} ctx A context.
- * @param {string} name the vanadium name of the service to bind to.
- * @param {module:vanadium.rpc~Client~bindToCb} [cb] if given, this function
+ * @param {string} name The vanadium name of the service to bind to.
+ * @param {module:vanadium.rpc~Client~bindToCb} [cb] If given, this function
  * will be called on completion of the bind.
- * @return {Promise} An object with methods that perform rpcs to service methods
+ * @return {Promise<object>} Promise that resolves to the stub object containing
+ * the exported methods of the remote service.
  */
 Client.prototype.bindTo = function(ctx, name, cb) {
   var client = this;
@@ -408,12 +410,15 @@
  * });
  * </pre>
  *
- * @param {string} name the vanadium name of the service to bind to.
- * @param {module:vanadium.vdl.signature.Interface} signature the service
+ * @param {string} name The vanadium name of the service to bind to.
+ * @param {module:vanadium.vdl.signature.Interface} signature The service
  * signature of a vanadium service.
- * @return {object} An object with methods that perform rpcs to service methods.
+ * @param {module:vanadium.rpc~Client~bindToCb} [cb] If given, this function
+ * will be called on completion of the bind.
+ * @return {Promise<object>} Promise that resolves to the stub object containing
+ * the exported methods of the remote service.
  */
-Client.prototype.bindWithSignature = function(name, signature) {
+Client.prototype.bindWithSignature = function(name, signature, cb) {
   var client = this;
   var boundObject = {};
 
@@ -554,20 +559,21 @@
 };
 
 /**
- * A callback that is called with either a signature or an error
+ * A callback that is called with either signature interfaces or an error.
  * @callback module:vanadium.rpc~Client~signatureCb
- * @param {error} err If set, the error that occured.
- * @param {module:vanadium.vdl.signature.Interface} signature The signature
- * result.
+ * @param {Error} err If set, the error that occurred.
+ * @param {module:vanadium.vdl.signature.Interface[]} signature The signature
+ * interfaces.
  */
 /**
  * Returns the object signatures for a given object name.
  * @param {module:vanadium.context.Context} ctx A context.
- * @param {string} name the vanadium name of the service to bind to.
- * @param {function} [cb] if given, this function will be called on
- * completion.
- * @return {Promise<module:vanadium.vdl.signature.Interface>} Promise that will
- * be resolved with the signatures or rejected with an error if there is one.
+ * @param {string} name The vanadium name of the service to bind to.
+ * @param {module:vanadium.rpc~Client~signatureCb} [cb] If given, this
+ * function will be called on completion.
+ * @return {Promise<module:vanadium.vdl.signature.Interface[]>} Promise that
+ * will be resolved with the signature interfaces or rejected with an error
+ * if there is one.
  */
 Client.prototype.signature = function(ctx, name, cb) {
   var last = arguments.length - 1;
@@ -604,21 +610,21 @@
  * [remoteBlessings]{@link module:vanadium.rpc~Client#remoteBlessings}
  * function.
  * @callback module:vanadium.rpc~Client~remoteBlessingsCb
- * @param {error} err If set, the error that occured
- * @param {array<string>} blessingNames The blessings of the remote server.
+ * @param {Error} err If set, the error that occurred.
+ * @param {string[]} blessingNames The blessings of the remote server.
  */
 /**
  * Returns the remote blessings of a server at the given name.
  * @param {module:vanadium.context.Context} ctx A context.
- * @param {string} name the vanadium name of the service to get the remote
+ * @param {string} name The vanadium name of the service to get the remote
  * blessings of.
- * @param {string} [method] the name of the rpc method that will be started in
+ * @param {string} [method] The name of the rpc method that will be started in
  * order to read the blessings.  Defaults to 'Signature'.  This only matters in
  * the case when a server responds to different method calls with different
  * blessings.
- * @param {module:vanadium.rpc~Client~remoteBlessingsCb} [cb] if given, this
+ * @param {module:vanadium.rpc~Client~remoteBlessingsCb} [cb] If given, this
  * function will be called on completion.
- * @return {Promise<array<string>>} Promise that will be resolved with the
+ * @return {Promise<string[]>} Promise that will be resolved with the
  * blessing names or rejected with an error if there is one.
  */
 Client.prototype.remoteBlessings = function(ctx, name, method, cb) {
@@ -645,7 +651,7 @@
  *
  * Currently the only supported key is 'allowedServersPolicy'.
  *
- * @param {Object} opts map of call options.
+ * @param {object} opts Map of call options.
  * @param {string[]} opts.allowedServersPolicy Array of blessing patterns that
  * the allowed server must match in order for the RPC to be initiated.
  */
diff --git a/src/rpc/index.js b/src/rpc/index.js
index ba71281..0f4a7ce 100644
--- a/src/rpc/index.js
+++ b/src/rpc/index.js
@@ -34,6 +34,7 @@
 
 module.exports = {
   /**
+   * @summary
    * Namespace reserved defines interfaces for interacting with reserved RPC
    * methods such as Signature, MethodSignature and Glob.
    * @memberof module:vanadium.rpc
diff --git a/src/rpc/reserved/docs.js b/src/rpc/reserved/docs.js
index bb80e4a..8d32e4d 100644
--- a/src/rpc/reserved/docs.js
+++ b/src/rpc/reserved/docs.js
@@ -3,8 +3,9 @@
 // license that can be found in the LICENSE file.
 
 /**
+ * @summary
  * GlobMaxRecursionReached indicates that the Glob
- * request exceeded the max recursion level
+ * request exceeded the max recursion level.
  * @name GlobMaxRecursionReached
  * @constructor
  * @param {module:vanadium.context.Context} ctx The context the error was
@@ -14,6 +15,7 @@
  * @augments module:vanadium.verror.VanadiumError
  */
 /**
+ * @summary
  * GlobMatchesOmitted indicates that some of the Glob results might
  * have been omitted due to access restrictions.
  * @name GlobMatchesOmitted
@@ -25,6 +27,7 @@
  * @augments module:vanadium.verror.VanadiumError
  */
 /**
+ * @summary
  * GlobNotImplemented indicates that Glob is not implemented by the object.
  * @name GlobNotImplemented
  * @constructor
diff --git a/src/rpc/server.js b/src/rpc/server.js
index 31a694e..6f41879 100644
--- a/src/rpc/server.js
+++ b/src/rpc/server.js
@@ -37,7 +37,7 @@
  * Server defines the interface for managing a collection of services.
  * @description
  * <p>Private Constructor, use
- * [Runtime#newServer]{@link module:vanadium~Runtime#newServer}</p>
+ * [Runtime#newServer]{@link module:vanadium~Runtime#newServer}.</p>
  * @inner
  * @constructor
  * @memberof module:vanadium.rpc
@@ -56,9 +56,9 @@
 }
 
 /**
- * @typedef module:vanadium.rpc~Server~ServeOptions
  * ServeOptions is a set of options that are passed to the
  * [serve]{@link module:vanadium.rpc~Server#serve}.
+ * @typedef module:vanadium.rpc~Server~ServeOptions
  * @property {module:vanadium.security.Authorize} authorizer An Authorizer
  * that will handle the authorization for the method call.  If null, then the
  * default strict authorizer will be used.
@@ -76,20 +76,21 @@
  * });
  * </pre>
  * <p>If name is an empty string, no attempt will made to publish that
- * name to a mount table. It is an error to call {@link Server#serve|serve}
- * if either {@link Server#serveDispatcher|serveDispatcher} or
- * {@link Server.serve|serve} has already been called.
+ * name to a mount table. It is an error to call
+ * {@link module:vanadium.rpc~Server#serve|serve}
+ * if either {@link module:vanadium.rpc~Server#serveDispatcher|serveDispatcher}
+ * or {@link module:vanadium.rpc~Server.serve|serve} has already been called.
  * To serve the same object under multiple names,
- * {@link Server#addName|addName} can be used.</p>
+ * {@link module:vanadium.rpc~Server#addName|addName} can be used.</p>
  *
  * @public
- * @param {string} name Name to serve under
+ * @param {string} name Name to serve under.
  * @param {object} serviceObject The service object that has a set of
- * exported methods
- * @param {module:vanadium.rpc~Server~ServeOptions} options Options config
+ * exported methods.
+ * @param {module:vanadium.rpc~Server~ServeOptions} options Options config.
  * @param {module:vanadium~voidCb} [cb] If provided, the function
  * will be called on completion.
- * @return {Promise} Promise to be called when serve completes or fails.
+ * @return {Promise<void>} Promise to be called when serve completes or fails.
  */
 Server.prototype.serve = function(name, serviceObject, options, cb) {
   if (typeof options === 'function') {
@@ -109,32 +110,33 @@
 };
 
 /**
- * @typedef DispatcherResponse
- * @type {Object}
+ * @typedef module:vanadium.rpc~Server~DispatcherResponse
+ * @type {object}
  * @property {object} service The Invoker that will handle
  * method call.
- * @property {module:vanadium.security~Authorize} authorizer An Authorizer that
+ * @property {module:vanadium.security.Authorize} authorizer An Authorizer that
  * will handle the authorization for the method call.  If null, then the default
- * strict authorizer will be used.
+ * authorizer will be used.
  */
 
 /**
  * A function that returns the service object for a suffix/method pair.
- * @callback module:vanadium.rpc~Dispatcher
- * @param {string} suffix The suffix for the call
- * @param {string} method The method for the call
- * @param {Dispatcher-callback} cb The callback to call when the dispatch is
- * complete
- * @return {DispatcherResponse|Promise} Either the DispatcherResponse object to
+ * @callback module:vanadium.rpc~Server~Dispatcher
+ * @param {string} suffix The suffix for the call.
+ * @param {string} method The method for the call.
+ * @param {module:vanadium.rpc~Server~Dispatcher-callback} cb
+ * The callback to call when the dispatch is complete.
+ * @return {module:vanadium.rpc~Server~DispatcherResponse | Promise}
+ * Either the DispatcherResponse object to
  * handle the method call or a Promise that will be resolved the service
  * callback.
  */
 
 /**
- * Callback passed into Dispatcher
- * @callback module:vanadium.rpc~Dispatcher-callback
- * @param {Error} err An error if one occurred
- * @param {object} object The object that will handle the method call
+ * Callback passed into Dispatcher.
+ * @callback module:vanadium.rpc~Server~Dispatcher-callback
+ * @param {Error} err An error if one occurred.
+ * @param {object} object The object that will handle the method call.
  */
 
 /**
@@ -153,20 +155,22 @@
  * <p>If name is an empty string, no attempt will made to publish that
  * name to a mount table. </p>
  *
- * <p>It is an error to call {@link Server#serveDispatcher|serveDispatcher}
- * if {@link Server#serve|serve} has already been called. It is also an error
+ * <p>It is an error to call
+ * {@link module:vanadium.rpc~Server#serveDispatcher|serveDispatcher}
+ * if {@link module:vanadium.rpc~Server#serve|serve} has already been called.
+ * It is also an error
  * to call serveDispatcher multiple times.</p>
  * To serve the same dispatcher under multiple names,
- * {@link Server#addName|addName} can be used. </p>
+ * {@link module:vanadium.rpc~Server#addName|addName} can be used. </p>
  *
  * @public
- * @param {string} name Name to serve under
- * @param {module:vanadium.rpc~Dispatcher} dispatcher A function that will
- * take in the suffix and the method to be called and return the service
+ * @param {string} name Name to serve under.
+ * @param {module:vanadium.rpc~Server~Dispatcher} dispatcher A function that
+ * will take in the suffix and the method to be called and return the service
  * object for that suffix.
  * @param {module:vanadium~voidCb} [cb] If provided, the function
  * will be called on completion.
- * @return {Promise} Promise to be called when serve completes or fails.
+ * @return {Promise<void>} Promise to be called when serve completes or fails.
  */
 Server.prototype.serveDispatcher = function(name, dispatcher, cb) {
   this.dispatcher = dispatcher;
@@ -179,7 +183,8 @@
  * All published named are unmounted.
  * @param {module:vanadium~voidCb} [cb] If provided, the function
  * will be called on completion.
- * @return {Promise} Promise to be called when stop service completes or fails
+ * @return {Promise<void>} Promise to be called when stop service completes or
+ * fails
  */
 Server.prototype.stop = function(cb) {
   return this._router.stopServer(this, cb);
@@ -193,10 +198,11 @@
  * [serveDispatcher]{@link module:vanadium.rpc~Server#serveDispatcher}
  * or [addName]{@link module:vanadium.rpc~Server#addName}.
  * @public
- * @param {string} name Name to publish
+ * @param {string} name Name to publish.
  * @param {module:vanadium~voidCb} [cb] If provided, the function
  * will be called on completion.
- * @return {Promise} Promise to be called when operation completes or fails
+ * @return {Promise<void>} Promise to be called when operation completes or
+ * fails
  */
 Server.prototype.addName = function(name, cb) {
   return this._router.addName(name, this, cb);
@@ -209,10 +215,11 @@
  * [serveDispatcher]{@link module:vanadium.rpc~Server#serveDispatcher}
  * or [addName]{@link module:vanadium.rpc~Server#addName}.
  * @public
- * @param {string} name Name to remove
+ * @param {string} name Name to remove.
  * @param {function} [cb] If provided, the function will be called on
  * completion. The only argument is an error if there was one.
- * @return {Promise} Promise to be called when operation completes or fails
+ * @return {Promise<void>} Promise to be called when operation completes or
+ * fails.
  */
 Server.prototype.removeName = function(name, cb) {
   return this._router.removeName(name, this, cb);
@@ -220,7 +227,7 @@
 
 /**
  * @private
- * @param {Number} handle The handle for the service
+ * @param {Number} handle The handle for the service.
  * @return {Object} The invoker corresponding to the provided error.
  */
 Server.prototype.getInvokerForHandle = function(handle) {
@@ -233,11 +240,11 @@
 /**
  * Handles the authorization for an RPC.
  * @private
- * @param {Number} handle The handle for the authorizer
+ * @param {Number} handle The handle for the authorizer.
  * @param {module:vanadium.context.Context} ctx The ctx of the
  * call.
  * @param {module:vanadium.security~SecurityCall} call The security call.
- * @return {Promise} a promise that will be fulfilled with the result.
+ * @return {Promise} A promise that will be fulfilled with the result.
  */
 Server.prototype.handleAuthorization = function(handle, ctx, call) {
   var handler = this.serviceObjectHandles[handle];
diff --git a/src/vanadium.js b/src/vanadium.js
index 865f8f9..63923b1 100644
--- a/src/vanadium.js
+++ b/src/vanadium.js
@@ -15,7 +15,7 @@
 var vlog = require('./lib/vlog');
 
 var defaults = {
-  appName: 'untitled webapp',
+  appName: require('is-browser') ? window.location.host : 'untitled js app',
   authenticate: isBrowser,
   logLevel: vlog.levels.WARN,
   wspr: process.env.WSPR || (isBrowser ? null : 'http://localhost:8124')
diff --git a/src/vom/decoder.js b/src/vom/decoder.js
index 4689d24..ae51b8e 100644
--- a/src/vom/decoder.js
+++ b/src/vom/decoder.js
@@ -38,11 +38,13 @@
   this._deepWrap = deepWrap || false;
 }
 
-/**
- * Decodes the next object off of the message reader.
+/*
  * TODO(bprosnitz) We will want to be able to decode when we get callbacks.
  * Revisit this API.
- * @return The next object or null if no more objects are available.
+ */
+/**
+ * Decodes the next object off of the message reader.
+ * @return {object} The next object or null if no more objects are available.
  */
 Decoder.prototype.decode = function() {
   var type = this._messageReader.nextMessageType(this._typeDecoder);
