diff --git a/jVinci/src/main/java/org/apache/vinci/debug/Debug.java b/jVinci/src/main/java/org/apache/vinci/debug/Debug.java
index 33ea563..49a61cf 100644
--- a/jVinci/src/main/java/org/apache/vinci/debug/Debug.java
+++ b/jVinci/src/main/java/org/apache/vinci/debug/Debug.java
@@ -206,6 +206,8 @@
 
   /**
    * Same function as {@link #printDebuggingMessage(String)} but easier to type.
+   * @param message -
+   * @return -
    */
   static public String p(String message) {
     return printDebuggingMessage(message);
@@ -213,6 +215,8 @@
 
   /**
    * Same function as {@link #printDebuggingMessage(String,String)} but easier to type.
+   * @param location -
+   * @param message -
    */
   static public void p(String location, String message) {
     printDebuggingMessage(location, message);
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/BaseClient.java b/jVinci/src/main/java/org/apache/vinci/transport/BaseClient.java
index 777a169..591cb5f 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/BaseClient.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/BaseClient.java
@@ -197,6 +197,7 @@
 
   /**
    * Get the hostname/ip address to which this client is connected.
+   * @return -
    */
   public String getHost() {
     return host;
@@ -208,6 +209,7 @@
 
   /**
    * Get the socket used for the connection.
+   * @return -
    */
   protected Socket getSocket() {
     return socket;
@@ -216,6 +218,7 @@
   /**
    * Get the default timeout value for the socket (0 indicates never timeout, which is the default,
    * but generally NOT a good setting).
+   * @return -
    */
   public int getSocketTimeout() {
     return socketTimeout;
@@ -235,6 +238,7 @@
 
   /**
    * Set the transportable factory used by this client.
+   * @param f -
    */
   public void setTransportableFactory(TransportableFactory f) {
     factory = f;
@@ -328,13 +332,17 @@
    * Same as sendAndReceive(Transportable) except the provided factory is used to create the return
    * document in place of the default factory.
    * 
-   * @param f
-   *          The factory to used to create the return document.
    * 
    * @pre f != null
    * @pre in != null
    * 
    * @pre getHost() != null
+   * @param in -
+   * @param f
+   *          The factory to used to create the return document.
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   public Transportable sendAndReceive(Transportable in, TransportableFactory f) throws IOException,
           ServiceException {
@@ -366,9 +374,12 @@
    * Same as sendAndReceive(Transportable, timeout) except the provided factory is used to create
    * the return document in place of the default factory.
    * 
-   * @param in
+   * @param in -
    * @param f  The factory to used to create the return document.
-   * @param timeout
+   * @param timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    * @pre in != null
    * @pre f != null
    * @pre getHost() != null
@@ -408,6 +419,10 @@
    * 
    * @pre query != null
    * @pre getHost() != null
+   * @param query -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   public VinciFrame rpc(Transportable query) throws IOException, ServiceException {
     return (VinciFrame) sendAndReceive(query);
@@ -417,8 +432,11 @@
    * Same as sendAndReceive(Transportable, timeout) except for return type. Syntactic sugar method
    * for the case where return result is known to be VinciFrame (eliminates the need for casting in
    * the typical usage case).
-   * 
+   * @param query -
+   * @param timeout - 
    * @return A VinciFrame representing the service result.
+   * @throws IOException -
+   * @throws ServiceException -
    * 
    * @pre query != null
    * @pre getHost() != null
@@ -516,6 +534,7 @@
    * Set connection restablishment on IOException to on/off, default is ON. This way, by default,
    * BaseClient attempts to reopen a connection at most once if it receives an IOException which can
    * happen, for example, from the connection timing out.
+   * @param to -
    */
   public void setRetry(boolean to) {
     retry = to;
@@ -523,6 +542,7 @@
 
   /**
    * Fetch the header of the last Transportable received.
+   * @return -
    */
   public KeyValuePair getHeader() {
     return header;
@@ -535,6 +555,13 @@
    * @pre f != null
    * @pre p &ge; 0
    * @pre p &lt; 65536
+   * @param in -
+   * @param host_name -
+   * @param p -
+   * @param f -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   static public Transportable sendAndReceive(Transportable in, String host_name, int p,
           TransportableFactory f) throws IOException, ServiceException {
@@ -555,6 +582,14 @@
    * @pre f != null
    * @pre p &ge; 0
    * @pre p &lt; 65536
+   * @param in -
+   * @param host_name -
+   * @param p -
+   * @param f -
+   * @param socket_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   static public Transportable sendAndReceive(Transportable in, String host_name, int p,
           TransportableFactory f, int socket_timeout) throws IOException, ServiceException {
@@ -577,6 +612,15 @@
    * @pre f != null
    * @pre p &ge; 0
    * @pre p &lt; 65536
+   * @param in -
+   * @param host_name -
+   * @param p -
+   * @param f -
+   * @param socket_timeout -
+   * @param connect_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   static public Transportable sendAndReceive(Transportable in, String host_name, int p,
           TransportableFactory f, int socket_timeout, int connect_timeout) throws IOException,
@@ -599,6 +643,12 @@
    * @pre host_name != null
    * @pre p &ge; 0
    * @pre p &lt; 65536
+   * @param in -
+   * @param host_name -
+   * @param p -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   static public VinciFrame rpc(Transportable in, String host_name, int p) throws IOException,
           ServiceException {
@@ -613,6 +663,13 @@
    * @pre in != null
    * @pre p &ge; 0
    * @pre p &lt; 65536
+   * @param in -
+   * @param host_name -
+   * @param p -
+   * @param socket_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   static public VinciFrame rpc(Transportable in, String host_name, int p, int socket_timeout)
           throws IOException, ServiceException {
@@ -628,6 +685,14 @@
    * @pre in != null
    * @pre p &ge; 0
    * @pre p &lt; 65536
+   * @param in -
+   * @param host_name -
+   * @param p -
+   * @param socket_timeout -
+   * @param connect_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   static public VinciFrame rpc(Transportable in, String host_name, int p, int socket_timeout,
           int connect_timeout) throws IOException, ServiceException {
@@ -641,6 +706,11 @@
    * @pre getHost() != null
    * @pre os != null
    * @pre is != null
+   * @param in -
+   * @param f -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   protected Transportable sendAndReceiveWork(Transportable in, TransportableFactory f)
           throws IOException, ServiceException {
@@ -658,6 +728,12 @@
    * @pre in != null
    * @pre f != null
    * @pre socket != null
+   * @param in -
+   * @param f -
+   * @param timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   protected Transportable sendAndReceiveWork(Transportable in, TransportableFactory f, int timeout)
           throws IOException, ServiceException {
@@ -673,6 +749,8 @@
   /**
    * @pre e != null
    * @pre getHost() != null
+   * @param e -
+   * @throws IOException -
    */
   protected void reopen(Exception e) throws IOException {
     Debug.p("Trying to reopen connection due to exception: " + e.getMessage());
@@ -747,6 +825,8 @@
 
   /**
    * Set the timeout value used by the underlying socket. Default is 2 minutes.
+   * @param millis -
+   * @throws IOException -
    */
   public void setSocketTimeout(int millis) throws IOException {
     if (socket != null) {
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/BaseServer.java b/jVinci/src/main/java/org/apache/vinci/transport/BaseServer.java
index 026864c..e49e7b5 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/BaseServer.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/BaseServer.java
@@ -161,6 +161,7 @@
 
   /**
    * Get the servable object being used by this server.
+   * @return -
    */
   public VinciServable getServable() {
     return servable;
@@ -174,6 +175,7 @@
    * 
    * @param millis
    *          The socket timeout value in milliseconds.
+   * @throws IOException -
    */
   public void setSocketTimeout(int millis) throws IOException {
     socketTimeout = millis;
@@ -218,6 +220,8 @@
   /**
    * Set the intitial and maximum size of the threadpool used by this server. This should be called
    * before serving starts otherwise it has no effect.
+   * @param initial -
+   * @param max -
    */
   public void setThreadPoolSize(int initial, int max) {
     Debug.Assert(!isServing);
@@ -313,6 +317,7 @@
    * @return The server socket to be used by this server for accepting requests.
    * @param port
    *          The port which is to be listened to by the created socket.
+   * @throws IOException -
    * @pre port &ge; 0
    * @pre port &lt; 65536
    */
@@ -379,6 +384,8 @@
    * Get a runnable object to run within a pooled thread that will handle the request.
    * 
    * @pre client != null
+   * @param client -
+   * @return -
    */
   protected Runnable getRunnable(Socket client) {
     return new BaseServerRunnable(client, this);
@@ -389,6 +396,7 @@
    * 
    * @pre client != null
    * @pre threadPool != null
+   * @param client -
    */
   protected void handleRequest(Socket client) {
     try {
@@ -442,6 +450,9 @@
    * the appropriate VinciServable.
    * 
    * @pre in != null
+   * @param in -
+   * @param header -
+   * @return -
    */
   public Transportable eval(Transportable in, KeyValuePair header) {
     // Right now the header parameter is unused by it is provided so that it can be used for
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/BaseServerRunnable.java b/jVinci/src/main/java/org/apache/vinci/transport/BaseServerRunnable.java
index 2b40d72..483dcac 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/BaseServerRunnable.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/BaseServerRunnable.java
@@ -42,6 +42,7 @@
   /**
    * Allows anyone in the calling chain of the 'run' method to get access to the socket being used
    * in the Vinci connection via the ThreadLocal variable.
+   * @return -
    */
   public static Socket getSocket() {
     return (Socket) THREAD_LOCAL_SOCKET.get();
@@ -50,6 +51,8 @@
   /**
    * @pre c != null
    * @pre p != null
+   * @param c -
+   * @param p -
    */
   public BaseServerRunnable(Socket c, BaseServer p) {
     socket = c;
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/Frame.java b/jVinci/src/main/java/org/apache/vinci/transport/Frame.java
index 2e989cc..9ccebd9 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/Frame.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/Frame.java
@@ -278,6 +278,7 @@
    * Factory method used by fromStream when it needs to create a frame leaf. Default implementation
    * creates a regular FrameLeaf.
    * 
+   * @param array -
    * @return the created FrameLeaf.
    * 
    * @pre array != null
@@ -289,10 +290,11 @@
   /**
    * Factory method used by fromStream when it needs to create a sub-frame. Default implementation
    * creates a subframe of the same type as the current frame.
-   * 
+   * @param tag_name -
+   * @param initialCapacity -
+   * @return the created sub-frame.
    * @throws UnsupportedOperationException
    *           if the getClass().newInstance() call on this object results in an exception.
-   * @return the created sub-frame.
    * 
    * @pre tag_name != null
    * @pre initialCapacity &ge; 0
@@ -336,6 +338,8 @@
    * 
    * @pre rval != null
    * @pre offset &ge; 0
+   * @param rval -
+   * @param offset -
    */
   protected void toXML(StringBuffer rval, int offset) {
     KeyValuePair keyVal = null;
@@ -376,6 +380,7 @@
    * 
    * @param key
    *          The key to be associated with the value.
+   * @param val -
    * @return This frame
    * @throws UnsupportedOperationException
    *           if this document model doesn't support key addition.
@@ -392,6 +397,7 @@
    * 
    * @param key
    *          The key to be associated with the value.
+   * @param val -
    * @return This frame
    * @throws UnsupportedOperationException
    *           if this document model doesn't support key addition.
@@ -410,6 +416,7 @@
    * 
    * @param key
    *          The key to be associated with the value.
+   * @param val -
    * @throws UnsupportedOperationException
    *           if this document model doesn't support key addition.
    * @return This frame
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/FrameComponent.java b/jVinci/src/main/java/org/apache/vinci/transport/FrameComponent.java
index 3fedecb..a5189f3 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/FrameComponent.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/FrameComponent.java
@@ -29,6 +29,7 @@
   /**
    * Set the attributes (replacing any previous ones) assocated with this Frame component. Default
    * implementation does nothing since attributes are not supported by default.
+   * @param s -
    */
   public void setAttributes(Attributes s) {
     Debug.p("WARNING: Attempt to set attributes of FrameComponent "
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/FrameLeaf.java b/jVinci/src/main/java/org/apache/vinci/transport/FrameLeaf.java
index 76d093e..caf794c 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/FrameLeaf.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/FrameLeaf.java
@@ -53,6 +53,8 @@
    * cannot be modified by external code.
    * 
    * @pre mydata != null
+   * @param mydata -
+   * @param encode -
    */
   public FrameLeaf(byte[] mydata, boolean encode) {
     if (encode) {
@@ -65,6 +67,7 @@
 
   /**
    * @pre mydata != null
+   * @param mydata -
    */
   public FrameLeaf(String mydata) {
     this.data = UTFConverter.convertStringToUTF(mydata);
@@ -76,6 +79,7 @@
    * @pre mystring != null
    * @pre { for (int i = 0; i &lt; mystring.length; i++) $assert(mystring[i] != null, "array elements
    *      are non-null"); }
+   * @param mystring -
    */
   public FrameLeaf(String[] mystring) {
     String separator = "#";
@@ -105,6 +109,7 @@
 
   /**
    * @pre myfloat != null
+   * @param myfloat -
    */
   public FrameLeaf(float[] myfloat) {
     StringBuffer add_me = new StringBuffer();
@@ -123,6 +128,7 @@
 
   /**
    * @pre mydouble != null
+   * @param mydouble -
    */
   public FrameLeaf(double[] mydouble) {
     StringBuffer add_me = new StringBuffer();
@@ -142,6 +148,7 @@
 
   /**
    * @pre myint != null
+   * @param myint -
    */
   public FrameLeaf(int[] myint) {
     StringBuffer add_me = new StringBuffer();
@@ -161,6 +168,7 @@
 
   /**
    * @pre mylong != null
+   * @param mylong -
    */
   public FrameLeaf(long[] mylong) {
     StringBuffer add_me = new StringBuffer();
@@ -241,6 +249,7 @@
 
   /**
    * Get the raw (usually UTF-8) frame data.
+   * @return -
    */
   public byte[] getData() {
     return data;
@@ -251,6 +260,7 @@
    * 
    * @exception LeafCastException
    *              if the data was not base64 encoded.
+   * @return -
    */
   public byte[] toBytes() {
     try {
@@ -265,6 +275,7 @@
    * 
    * @exception LeafCastException
    *              if the data could not be converted to long.
+   * @return -
    */
   public long toLong() {
     try {
@@ -281,6 +292,7 @@
    * 
    * @exception LeafCastException
    *              if the data could not be convered to a long array.
+   * @return -
    */
   public long[] toLongArray() {
     try {
@@ -307,6 +319,7 @@
    * 
    * @exception LeafCastException
    *              if the data could not be converted to int.
+   * @return -
    */
   public int toInt() {
     try {
@@ -323,6 +336,7 @@
    * 
    * @exception LeafCastException
    *              if the data could not be convered to an int array.
+   * @return -
    */
   public int[] toIntArray() {
     try {
@@ -349,6 +363,7 @@
    * 
    * @exception LeafCastException
    *              if the data could not be converted to float.
+   * @return -
    */
   public float toFloat() {
     try {
@@ -365,6 +380,7 @@
    * 
    * @exception LeafCastException
    *              if the data could not be convered to a float array.
+   * @return -
    */
   public float[] toFloatArray() {
     try {
@@ -391,6 +407,7 @@
    * 
    * @exception LeafCastException
    *              if the data could not be converted to double.
+   * @return -
    */
   public double toDouble() {
     try {
@@ -407,6 +424,7 @@
    * 
    * @exception LeafCastException
    *              if the data could not be convered to a double array.
+   * @return -
    */
   public double[] toDoubleArray() {
     try {
@@ -433,6 +451,7 @@
    * 
    * @exception LeafCastException
    *              if the underlying data was not utf-8 (which in general should not happen).
+   * @return -
    */
   public boolean toBoolean() {
     try {
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/FrameTransporter.java b/jVinci/src/main/java/org/apache/vinci/transport/FrameTransporter.java
index 18f68a0..5475b9e 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/FrameTransporter.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/FrameTransporter.java
@@ -32,12 +32,15 @@
  */
 public interface FrameTransporter {
   /**
-   * Marshall the frame to the input stream.
+   * Marshal the frame to the input stream.
    * 
    * @param is
    *          The stream where the Frame is written.
    * @param f
    *          The Frame to be marshalled.
+   * @return -
+   * @throws IOException -
+   * @throws EOFException -
    */
   KeyValuePair fromStream(InputStream is, Frame f) throws IOException, EOFException;
 
@@ -48,6 +51,7 @@
    *          The stream from where the data is read.
    * @param f
    *          The Frame to be populated from the stream.
+   * @throws IOException -
    */
   void toStream(OutputStream os, Frame f) throws IOException;
 }
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/KeyValuePair.java b/jVinci/src/main/java/org/apache/vinci/transport/KeyValuePair.java
index d396741..c6efa1f 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/KeyValuePair.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/KeyValuePair.java
@@ -38,6 +38,8 @@
   /**
    * @pre mykey != null
    * @pre myvalue != null
+   * @param mykey -
+   * @param myvalue -
    */
   public KeyValuePair(String mykey, FrameComponent myvalue) {
     this.key = mykey;
@@ -59,6 +61,7 @@
   // Convenient methods for accesing value as a specific type.
   /**
    * @pre value instanceof FrameLeaf
+   * @return -
    */
   public FrameLeaf getValueAsLeaf() {
     return (FrameLeaf) value;
@@ -70,6 +73,7 @@
 
   /**
    * @pre value instanceof Frame
+   * @return -
    */
   public Frame getValueAsFrame() {
     return (Frame) value;
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/PooledVinciClient.java b/jVinci/src/main/java/org/apache/vinci/transport/PooledVinciClient.java
index 96951dc..030760e 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/PooledVinciClient.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/PooledVinciClient.java
@@ -53,6 +53,8 @@
   /**
    * Create a PooledVinciClient that will establish at most maxPoolSize connections to the
    * designated service.
+   * @param serviceName -
+   * @param maxPoolSize -
    */
   public PooledVinciClient(String serviceName, int maxPoolSize) {
     this.serviceName = serviceName;
@@ -65,6 +67,7 @@
   /**
    * Set a VinciContext that will be used by this PooledVinciClient instead of the default global
    * context.
+   * @param context -
    */
   public void setContext(VinciContext context) {
     this.context = context;
@@ -72,6 +75,7 @@
 
   /**
    * Set a connect timeout that will be used in place of BaseClient.DEFAULT_CONNECT_TIMEOUT
+   * @param connectTimeoutMillis -
    */
   public void setConnectTimeout(int connectTimeoutMillis) {
     this.connectTimeout = connectTimeoutMillis;
@@ -79,6 +83,7 @@
 
   /**
    * Set a socket timeout that will be used in place of BaseClient.DEFAULT_SOCKET_TIMEOUT
+   * @param socketTimeoutMillis -
    */
   public void setSocketTimeout(int socketTimeoutMillis) {
     this.socketTimeout = socketTimeoutMillis;
@@ -86,6 +91,7 @@
 
   /**
    * Set a transportable factory that will be used in place of the VinciFrame factory.
+   * @param factory -
    */
   public void setTransportableFactory(TransportableFactory factory) {
     this.factory = factory;
@@ -93,6 +99,7 @@
 
   /**
    * Get the service name to which this client connects.
+   * @return -
    */
   public String getServiceName() {
     return serviceName;
@@ -100,6 +107,10 @@
 
   /**
    * Send a request to the service and receive the response. This method is tread safe.
+   * @param in -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   public Transportable sendAndReceive(Transportable in) throws IOException, ServiceException {
     VinciClient c = getClientFromPool();
@@ -113,6 +124,11 @@
   /**
    * Send a request to the service and receive the response, using the provided transportable
    * factory in place of the client-provided one. This method is tread safe.
+   * @param in -
+   * @param f -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   public Transportable sendAndReceive(Transportable in, TransportableFactory f) throws IOException,
           ServiceException {
@@ -127,6 +143,12 @@
   /**
    * Send a request to the service and receive the response, using the provided transportable
    * factory and socketTimeout in place of the client-provided ones. This method is tread safe.
+   * @param in -
+   * @param f -
+   * @param socketTimeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   public Transportable sendAndReceive(Transportable in, TransportableFactory f, int socketTimeout)
           throws IOException, ServiceException {
@@ -141,6 +163,11 @@
   /**
    * Send a request to the service and receive the response, using the provided socketTimeout in
    * place of the client-provided one. This method is tread safe.
+   * @param in -
+   * @param socketTimeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    */
   public Transportable sendAndReceive(Transportable in, int socketTimeout) throws IOException,
           ServiceException {
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/SimpleTransportable.java b/jVinci/src/main/java/org/apache/vinci/transport/SimpleTransportable.java
index d92da44..7b8e2fd 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/SimpleTransportable.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/SimpleTransportable.java
@@ -39,6 +39,7 @@
    * Create a SimpleTransportable that is an immutable copy of the provided Transportable object.
    * 
    * @pre convert_me != null
+   * @param convert_me -
    */
   public SimpleTransportable(Transportable convert_me) {
     try {
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/Transportable.java b/jVinci/src/main/java/org/apache/vinci/transport/Transportable.java
index ab36bd8..728526c 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/Transportable.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/Transportable.java
@@ -33,7 +33,8 @@
    * 
    * @param is
    *          The stream to read from.
-   * @exception IOException
+   * @return -
+   * @exception IOException -
    */
   KeyValuePair fromStream(InputStream is) throws IOException;
 
@@ -42,7 +43,7 @@
    * 
    * @param os
    *          The stream to write into.
-   * @exception IOException
+   * @exception IOException -
    */
   void toStream(OutputStream os) throws IOException;
 
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/VinciClient.java b/jVinci/src/main/java/org/apache/vinci/transport/VinciClient.java
index 804e2ae..7d58244 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/VinciClient.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/VinciClient.java
@@ -47,6 +47,8 @@
    * @param service_name
    *          The name of the service to connect to.
    * 
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if no VNS_HOST has been specified.
    * 
@@ -65,6 +67,8 @@
    * @param factory
    *          The factory used for creating return documents of desired type.
    * 
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if no VNS_HOST has been specified.
    * 
@@ -82,6 +86,11 @@
    * @pre factory != null
    * @pre myContext != null
    * 
+   * @param service_name -
+   * @param factory -
+   * @param myContext -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if no VNS_HOST has been specified.
    */
@@ -95,7 +104,10 @@
   /**
    * @pre service_name != null
    * @pre myContext != null
-   * 
+   * @param service_name -
+   * @param myContext -
+   * @throws ServiceDownException -
+   * @throws VNSException  -
    * @throws IllegalStateException
    *           if no VNS_HOST has been specified.
    */
@@ -113,6 +125,8 @@
    * @param connectTimeout
    *          The number of milliseconds that will elapse before a connect attempt fails.
    * 
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if no VNS_HOST has been specified.
    * 
@@ -134,6 +148,8 @@
    * @param connectTimeout
    *          The number of milliseconds that will elapse before a connect attempt fails.
    * 
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if no VNS_HOST has been specified.
    * 
@@ -153,6 +169,12 @@
    * @pre factory != null
    * @pre myContext != null
    * 
+   * @param service_name -
+   * @param factory -
+   * @param myContext -
+   * @param connectTimeout -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if no VNS_HOST has been specified.
    */
@@ -168,7 +190,11 @@
    * 
    * @pre service_name != null
    * @pre myContext != null
-   * 
+   * @param service_name -
+   * @param myContext -
+   * @param connectTimeout -
+   * @throws ServiceDownException -
+   * @throws VNSException  -
    * @throws IllegalStateException
    *           if no VNS_HOST has been specified.
    */
@@ -188,6 +214,7 @@
   /**
    * Construct a new client WITHOUT opening a connection, using the specified factory to create
    * return documents.
+   * @param f -
    */
   public VinciClient(TransportableFactory f) {
     super(f);
@@ -196,6 +223,7 @@
   /**
    * Get the priority level of the service to which this client is connected. This method only works
    * after the connection has been opened.
+   * @return -
    */
   public int getLevel() {
     return level;
@@ -208,7 +236,9 @@
    * Services should have "non zero" instance numbers only when more than one instance of the
    * service is running on the same host. The unique instance value allows each instance to be
    * distinguished and uniquely addressed via a fully qualified service name.
+   * @return -
    */
+
   public int getInstance() {
     return instance;
   }
@@ -217,6 +247,14 @@
    * Convenience method for "one-shot"/single-query connections. Equivalent of manually creating a
    * new VinciClient(), calling (non-static) sendAndReceive, and then closing the client.
    * 
+   * @param in -
+   * @param service_name -
+   * @param factory -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if the VNS host has not been specified.
    * 
@@ -234,6 +272,13 @@
    * Convenience method for "one-shot"/single-query connections. Equivalent of manually creating a
    * new VinciClient(), calling (non-static) sendAndReceive, and then closing the client.
    * 
+   * @param in -
+   * @param service_name -
+   * @param factory -
+   * @param socket_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    * @throws IllegalStateException
    *           if the VNS host has not been specified.
    * 
@@ -252,6 +297,14 @@
    * Convenience method for "one-shot"/single-query connections. Equivalent of manually creating a
    * new VinciClient(), calling (non-static) sendAndReceive, and then closing the client.
    * 
+   * @param in -
+   * @param service_name -
+   * @param factory -
+   * @param socket_timeout -
+   * @param connect_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    * @throws IllegalStateException
    *           if the VNS host has not been specified.
    * 
@@ -270,6 +323,7 @@
   /**
    * Get the context associated with this client. By default clients use the global Vinci context,
    * though this can be overridden.
+   * @return -
    */
   public VinciContext getContext() {
     if (context == null) {
@@ -284,6 +338,7 @@
    * be used. You should set the context BEFORE a connection is open (e.g. ater using the no-arg
    * constructor), otherwise the global context parameters will be used to establish the connection
    * before you have a chance to change it.
+   * @param c -
    */
   public void setContext(VinciContext c) {
     context = c;
@@ -293,6 +348,7 @@
    * Get the fully qualified name of this service. This method is useful when for whatever reason a
    * connection needs to be re-established with this exact same service instance. This method only
    * works after connection has been established.
+   * @return -
    * 
    * @pre getHost() != null
    */
@@ -459,9 +515,15 @@
    * method for the case where return result is known to be VinciFrame (eliminates the need for
    * casting in the typical usage case).
    * 
+   * @param in -
+   * @param service_name -
+   * @return A VinciFrame representing the service result.
    * @throws IllegalStateException
    *           if the VNS host has not been specified.
-   * @return A VinciFrame representing the service result.
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * 
    * @pre in != null
    * @pre service_name != null
@@ -478,11 +540,18 @@
    * (Transportable, service_name, timeout). Despite the equivalent signatures, the semantics of
    * these two methods are quite different.
    * 
-   * @return A VinciFrame representing the service result.
    * 
    * @pre in != null
    * @pre service_name != null
    * @pre timeout &ge; 0
+   * @param in -
+   * @param service_name -
+   * @param timeout -
+   * @return A VinciFrame representing the service result.
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    */
   static public VinciFrame rpc(Transportable in, String service_name, int timeout)
           throws IOException, ServiceException, ServiceDownException, VNSException {
@@ -496,12 +565,20 @@
    * whereas this one accepts (Transportable, service_name, timeout). Despite the equivalent
    * signatures, the semantics of these two methods are quite different.
    * 
-   * @return A VinciFrame representing the service result.
    * 
    * @pre in != null
    * @pre service_name != null
    * @pre timeout &ge; 0
    * @pre connect_timeout &gt; 0
+   * @param in -
+   * @param service_name -
+   * @param timeout -
+   * @param connect_timeout -
+   * @return A VinciFrame representing the service result.
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    */
   static public VinciFrame rpc(Transportable in, String service_name, int timeout,
           int connect_timeout) throws IOException, ServiceException, ServiceDownException,
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/VinciFrame.java b/jVinci/src/main/java/org/apache/vinci/transport/VinciFrame.java
index 083b8e4..7f1ec42 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/VinciFrame.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/VinciFrame.java
@@ -48,6 +48,7 @@
 
   /**
    * Get a TransportableFactory that creates new VinciFrames.
+   * @return -
    */
   static public TransportableFactory getVinciFrameFactory() {
     return vinciFrameFactory;
@@ -64,6 +65,8 @@
    * Create a VinciFrame that is a (deep) copy of the given transportable.
    * 
    * @pre t != null
+   * @param t -
+   * @return -
    */
   public static VinciFrame toVinciFrame(Transportable t) {
     return (VinciFrame) TransportableConverter.convert(t, getVinciFrameFactory());
@@ -159,6 +162,9 @@
    * 
    * @pre key != null
    * @pre val != null
+   * @param key -
+   * @param val -
+   * @return -
    */
   public VinciFrame fset(String key, String val) {
     set(key, new FrameLeaf(val));
@@ -170,6 +176,9 @@
    * doesn't exist, then the value is added.
    * 
    * @pre key != null
+   * @param key -
+   * @param val -
+   * @return -
    */
   public VinciFrame fset(String key, long val) {
     set(key, new FrameLeaf(val));
@@ -181,6 +190,9 @@
    * doesn't exist, then the value is added.
    * 
    * @pre key != null
+   * @param key -
+   * @param val -
+   * @return -
    */
   public VinciFrame fset(String key, boolean val) {
     set(key, new FrameLeaf(val));
@@ -192,6 +204,9 @@
    * doesn't exist, then the value is added.
    * 
    * @pre key != null
+   * @param key -
+   * @param val -
+   * @return -
    */
   public VinciFrame fset(String key, int val) {
     set(key, new FrameLeaf(val));
@@ -204,6 +219,9 @@
    * 
    * @pre key != null
    * @pre val != null
+   * @param key -
+   * @param val -
+   * @return -
    */
   public VinciFrame fset(String key, int[] val) {
     set(key, new FrameLeaf(val));
@@ -218,6 +236,9 @@
    *              if val is null.
    * 
    * @pre key != null
+   * @param key -
+   * @param val -
+   * @return -
    */
   public VinciFrame fset(String key, Frame val) {
     set(key, val);
@@ -229,6 +250,9 @@
    * doesn't exist, then the value is added.
    * 
    * @pre key != null
+   * @param key -
+   * @param val -
+   * @return -
    */
   public VinciFrame fset(String key, double val) {
     set(key, new FrameLeaf(val));
@@ -244,6 +268,9 @@
    * 
    * @pre key != null
    * @pre bin != null
+   * @param key -
+   * @param bin -
+   * @return -
    */
   public VinciFrame fset(String key, byte[] bin) {
     set(key, new FrameLeaf(bin, true));
@@ -260,6 +287,9 @@
    * 
    * @pre key != null
    * @pre bin != null
+   * @param key -
+   * @param bin -
+   * @return -
    */
   public VinciFrame fsetTrueBinary(String key, byte[] bin) {
     set(key, new FrameLeaf(bin, false));
@@ -275,6 +305,8 @@
    *              if val is null.
    * 
    * @pre key != null
+   * @param key -
+   * @param val -
    */
   protected void set(String key, FrameComponent val) {
     if (val != null) {
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/VinciServer.java b/jVinci/src/main/java/org/apache/vinci/transport/VinciServer.java
index 96eb9a5..2f36272 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/VinciServer.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/VinciServer.java
@@ -60,6 +60,8 @@
    * 
    * @param host_name
    *          The DNS hostname of the machine running this server.
+   * @param service_name -
+   * @param servable -
    * 
    * @pre service_name != null
    * @pre host_name != null
@@ -73,6 +75,8 @@
    * Create a new server that reports the current machine's IP address as the host. This should not
    * be used for DHCP-based hosts since IP address can change.
    * 
+   * @param service_name -
+   * @param servable -
    * @throws UnknownHostException
    *           If there is an error determining machine IP address.
    * 
@@ -91,6 +95,11 @@
    * @pre servable != null
    * @pre myPriority &ge; -1
    * @pre myInstance &ge; 0
+   * @param service_name -
+   * @param host_name -
+   * @param servable -
+   * @param myPriority -
+   * @param myInstance -
    */
   public VinciServer(String service_name, String host_name, VinciServable servable, int myPriority,
           int myInstance) {
@@ -106,6 +115,10 @@
    * @pre host_name != null
    * @pre servable != null
    * @pre myPriority &ge; -1
+   * @param service_name -
+   * @param host_name -
+   * @param servable -
+   * @param myPriority -
    */
   public VinciServer(String service_name, String host_name, VinciServable servable, int myPriority) {
     this(service_name, host_name, servable, myPriority, 0);
@@ -115,6 +128,10 @@
    * @pre service_name != null
    * @pre servable != null
    * @pre myPriority &ge; -1
+   * @param service_name -
+   * @param servable -
+   * @param myPriority -
+   * @throws UnknownHostException -
    */
   public VinciServer(String service_name, VinciServable servable, int myPriority)
           throws UnknownHostException {
@@ -126,6 +143,11 @@
    * @pre servable != null
    * @pre myPriority &ge; -1
    * @pre myInstance &ge; 0
+   * @param service_name -
+   * @param servable -
+   * @param myPriority -
+   * @param myInstance -
+   * @throws UnknownHostException -
    */
   public VinciServer(String service_name, VinciServable servable, int myPriority, int myInstance)
           throws UnknownHostException {
@@ -134,6 +156,7 @@
 
   /**
    * servable != null
+   * @param servable -
    */
   public VinciServer(VinciServable servable) {
     super(servable);
@@ -142,6 +165,7 @@
   /**
    * Get the context associated with this server. By default clients use the global Vinci context,
    * though this can be overridden.
+   * @return -
    */
   public VinciContext getContext() {
     if (context == null) {
@@ -172,6 +196,7 @@
    * was negotiated with VNS on which to serve requests.
    * 
    * @since 2.0.15
+   * @return -
    */
   public int getServingPort() {
     return this.port;
@@ -180,6 +205,7 @@
   /**
    * Set the VinciContext to be used by this server. Set to null if you wish the global context to
    * be used.
+   * @param c -
    */
   public void setContext(VinciContext c) {
     context = c;
@@ -242,6 +268,8 @@
    * @param shutdown_message
    *          Should be used to pass a message explaining the shutdown, or in the future it may also
    *          include authentication information for password-protected shutdown.
+   * @param shutdown_message -
+   * @return -
    */
   public static Transportable createShutdownCommand(String shutdown_message) {
     return new VinciFrame().fadd(TransportConstants.SHUTDOWN_KEY, shutdown_message);
@@ -252,6 +280,8 @@
    * you want to stop the server call shutdownServing() -- this method should have probably been
    * declared "protected". You can override this method if you want the shutdown message to be
    * ignored in certain cases.
+   * @param shutdown_message -
+   * @return -
    */
   public boolean shutdown(String shutdown_message) {
     // Override this method if shutdown is to be ignored in certain cases (by returning
@@ -274,6 +304,9 @@
   }
 
   /**
+   * @return -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if VNS host isn't specified.
    */
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/XTalkTransporter.java b/jVinci/src/main/java/org/apache/vinci/transport/XTalkTransporter.java
index cf2d081..e3b1943 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/XTalkTransporter.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/XTalkTransporter.java
@@ -153,6 +153,8 @@
    * 
    * @param is the input stream
    * @param f frame
+   * @param buffer -
+   * @param cbuffer -
    * @return key value 
    * @throws IOException passthru
    * 
@@ -189,6 +191,8 @@
    * 
    * @param is the input stream
    * @param f the Frame
+   * @param buffer -
+   * @param cbuffer -
    * @return key value
    * @throws IOException passthru
    * 
@@ -245,7 +249,9 @@
    * @param f frame
    * @param field_count field count
    * @param marker marker
-   * @throws IOException passthru
+   * @param buffer -
+   * @param cbuffer -
+   * @throws IOException passthru 
    * 
    * @pre is != null
    * @pre f != null
@@ -408,6 +414,7 @@
    * 
    * @param os output stream
    * @param f frame
+   * @param workbuf -
    * @throws IOException  passthru
    * 
    * @pre os != null
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/context/VinciContext.java b/jVinci/src/main/java/org/apache/vinci/transport/context/VinciContext.java
index beb5aab..ef0299d 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/context/VinciContext.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/context/VinciContext.java
@@ -149,6 +149,8 @@
   /**
    * @pre myport &ge; 0
    * @pre myport &lt; 65536
+   * @param myhost -
+   * @param myport -
    */
   public VinciContext(String myhost, int myport) {
     this.host = myhost;
@@ -163,6 +165,7 @@
    * System.setProperty("VNS_HOST", [hostname]) before ever invoking any Vinci client code.
    * Otherwise, you can set the hostname using the setVNSHost() method provided by this class.
    * 
+   * @return -
    * @throws IllegalStateException 
    *           if the VNS host has not been specified.
    */
@@ -183,6 +186,7 @@
    * System.setProperty("VNS_PORT", [hostname]) before ever invoking any Vinci client code.
    * Otherwise, the port will default to 9000. You can override this default (or any
    * property-specified value) by calling the setPort() method provided by this class.
+   * @return -
    */
   public int getVNSPort() {
     return port;
@@ -190,6 +194,7 @@
 
   /**
    * Set the VNS hostname.
+   * @param h -
    */
   public void setVNSHost(String h) {
     host = h;
@@ -201,6 +206,7 @@
    * 
    * @pre port &ge; 0
    * @pre port &lt; 65536
+   * @param p -
    */
   public void setVNSPort(int p) {
     port = p;
@@ -210,6 +216,7 @@
   /**
    * Returns whether clients can use stale resolve cache entries for service location in the event
    * VNS is unreachable.
+   * @return -
    */
   public boolean areStaleLookupsAllowed() {
     return allowStaleLookups;
@@ -218,6 +225,7 @@
   /**
    * Set whether clients can use stale resolve cache entries for service location in the event VNS
    * is unreachable. Default is true.
+   * @param b -
    */
   public void setAllowStaleLookups(boolean b) {
     allowStaleLookups = b;
@@ -225,6 +233,7 @@
 
   /**
    * Get the time-to-live of cached service locators (resolve results).
+   * @return -
    */
   public int getResolveCacheTTL() {
     return ttlMillis;
@@ -233,6 +242,7 @@
   /**
    * Set the time-to-live of cached service locators (resolve results). Default is 1 minute. Set to
    * 0 to disable caching completely.
+   * @param millis -
    */
   public void setResolveCacheTTL(int millis) {
     ttlMillis = millis;
@@ -240,6 +250,7 @@
 
   /**
    * Get the timeout setting of VNS resolve queries.
+   * @return -
    */
   public int getVNSResolveTimeout() {
     return vnsResolveTimeout;
@@ -247,6 +258,7 @@
 
   /**
    * Set the timeout of VNS resolve queries. Default is 20 seconds.
+   * @param millis -
    */
   public void setVNSResolveTimeout(int millis) {
     vnsResolveTimeout = millis;
@@ -254,6 +266,7 @@
 
   /**
    * Get the timeout setting of VNS serveon queries.
+   * @return -
    */
   public int getVNSServeonTimeout() {
     return vnsServeonTimeout;
@@ -261,6 +274,7 @@
 
   /**
    * Set the timeout of VNS serveon queries. Default is 60 seconds.
+   * @param millis -
    */
   public void setVNSServeonTimeout(int millis) {
     vnsServeonTimeout = millis;
@@ -269,6 +283,7 @@
   /**
    * Returns whether socket keepAlive is enabled.
    * @see java.net.Socket#setKeepAlive(boolean)
+   * @return -
    */
   public boolean isSocketKeepAliveEnabled() {
     return socketKeepAliveEnabled;
@@ -277,6 +292,7 @@
   /**
    * Set whether socket keepAlive is enabled.  Default is true.
    * @see java.net.Socket#setKeepAlive(boolean)
+   * @param b -
    */
   public void setSocketKeepAliveEnabled(boolean b) {
     socketKeepAliveEnabled = b;
@@ -284,6 +300,7 @@
 
   /**
    * Get the global VinciContext used by Vinci classes when no context is explicitly specified.
+   * @return -
    */
   static public VinciContext getGlobalContext() {
     return globalContext;
@@ -292,6 +309,7 @@
   /**
    * Get a cached resolve result (if any).
    * 
+   * @param serviceName -
    * @return the cached resolve result, or null if none is cached.
    * 
    * @pre serviceName != null
@@ -310,6 +328,7 @@
   /**
    * Get a cached resolve result (if any), but allow returning stale cache entries.
    * 
+   * @param serviceName -
    * @return the cached resolve result, or null if none is cached.
    * 
    * @pre serviceName != null
@@ -327,6 +346,8 @@
    * 
    * @pre serviceName != null
    * @pre r != null
+   * @param serviceName -
+   * @param r -
    */
   synchronized public void cacheResolveResult(String serviceName, ResolveResult r) {
     CachedVNSResult c = (CachedVNSResult) vnsCache.get(serviceName);
@@ -343,6 +364,7 @@
    * Flush any cache entries pertaining to the specified service.
    * 
    * @pre serviceName != null
+   * @param serviceName -
    */
   synchronized public void flushFromCache(String serviceName) {
     vnsCache.remove(serviceName);
@@ -357,6 +379,14 @@
    * 
    * @see org.apache.vinci.transport.VinciClient
    * 
+   * @param in -
+   * @param service_name -
+   * @param factory -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if the VNS host has not been specified.
    * 
@@ -380,6 +410,13 @@
    * 
    * @see org.apache.vinci.transport.VinciClient
    * 
+   * @param in -
+   * @param service_name -
+   * @param factory -
+   * @param socket_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
    * @throws IllegalStateException
    *           if the VNS host has not been specified.
    * 
@@ -407,7 +444,15 @@
    * 
    * @see org.apache.vinci.transport.VinciClient
    * 
-   * @throws IllegalStateException
+   * @param in -
+   * @param service_name -
+   * @param factory -
+   * @param socket_timeout -
+   * @param connect_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws IllegalStateException 
    *           if the VNS host has not been specified.
    * 
    * @pre in != null
@@ -432,6 +477,13 @@
    * 
    * @see org.apache.vinci.transport.VinciClient
    * 
+   * @param in -
+   * @param service_name -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if the VNS host has not been specified.
    * 
@@ -453,6 +505,14 @@
    * 
    * @see org.apache.vinci.transport.VinciClient
    * 
+   * @param in -
+   * @param service_name -
+   * @param timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if the VNS host has not been specified.
    * 
@@ -479,6 +539,15 @@
    * 
    * @see org.apache.vinci.transport.VinciClient
    * 
+   * @param in -
+   * @param service_name -
+   * @param socket_timeout -
+   * @param connect_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if the VNS host has not been specified.
    * 
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/document/AFrame.java b/jVinci/src/main/java/org/apache/vinci/transport/document/AFrame.java
index a409d3f..857fda1 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/document/AFrame.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/document/AFrame.java
@@ -69,6 +69,7 @@
 
   /**
    * Get a TransportableFactory that creates new AFrames.
+   * @return -
    */
   static public TransportableFactory getAFrameFactory() {
     return aFrameFactory;
@@ -80,6 +81,7 @@
 
   /**
    * @pre capacity &ge; 0
+   * @param capacity -
    */
   public AFrame(int capacity) {
     super(capacity);
@@ -89,6 +91,8 @@
    * Create an AFrame that is a (deep) copy of the given transportable.
    * 
    * @pre t != null
+   * @param t -
+   * @return -
    */
   public static AFrame toAFrame(Transportable t) {
     return (AFrame) TransportableConverter.convert(t, getAFrameFactory());
@@ -157,6 +161,7 @@
    * 
    * @param key
    *          The key to be associated with the value.
+   * @param val -
    * @return The (empty) set of attributes associated with the added key.
    * 
    * @pre key != null
@@ -172,6 +177,7 @@
    * 
    * @param key
    *          The key to be associated with the value.
+   * @param val -
    * @return The (empty) set of attributes associated with the added key.
    * 
    * @pre key != null
@@ -190,6 +196,7 @@
    * 
    * @param key
    *          The key to be associated with the value.
+   * @param val -
    * @return The (empty) set of attributes associated with the added key.
    * 
    * @pre key != null
@@ -420,6 +427,13 @@
    * @pre in != null
    * @pre service_name != null
    * 
+   * @param in -
+   * @param service_name -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if VNS_HOST is not specified.
    */
@@ -433,6 +447,14 @@
    * @pre service_name != null
    * @pre socket_timeout &ge; 0
    * 
+   * @param in -
+   * @param service_name -
+   * @param socket_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if VNS_HOST is not specified.
    */
@@ -450,6 +472,15 @@
    * WARNING: This method relies on JDK-1.4 specific functions. USE IT ONLY if you don't need to
    * maintain JDK1.3 compatability.
    * 
+   * @param in -
+   * @param service_name -
+   * @param socket_timeout -
+   * @param connect_timeout -
+   * @return -
+   * @throws IOException -
+   * @throws ServiceException -
+   * @throws ServiceDownException -
+   * @throws VNSException -
    * @throws IllegalStateException
    *           if VNS_HOST is not specified.
    */
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/document/XMLToVinci.java b/jVinci/src/main/java/org/apache/vinci/transport/document/XMLToVinci.java
index ec7a7ac..278410d 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/document/XMLToVinci.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/document/XMLToVinci.java
@@ -215,6 +215,7 @@
    *          An empty document to be populated.
    * @param r
    *          A reader providing the XML to populate the empty document.
+   * @return -
    * @exception ServiceException
    *              if there is a parse error.
    */
@@ -235,6 +236,7 @@
    * 
    * @param r
    *          A reader providing the XML to convert.
+   * @return -
    * @exception ServiceException
    *              if there is a parse error.
    */
@@ -263,7 +265,11 @@
       throw new ServiceException("XML Parse error: " + e);
     }
   }
-
+  /*
+   * public static AFrame xmlToAFrame(Reader r) throws ServiceException { return (AFrame)
+   * xmlToTransportable(r, new AFrame()); }
+   */
+ 
   /**
    * Convert the XML document (provided as a Reader) to the AFrame document model. Throws
    * ServiceException if the XML parser reports any error. WARNING: This method will silently ignore
@@ -271,13 +277,10 @@
    * 
    * @param r
    *          A reader providing the XML to convert.
+   * @return -
    * @exception ServiceException
    *              if there is a parse error.
    */
-  /*
-   * public static AFrame xmlToAFrame(Reader r) throws ServiceException { return (AFrame)
-   * xmlToTransportable(r, new AFrame()); }
-   */
   public static AFrame xmlToAFrame(Reader r) throws ServiceException {
     XMLReader xr;
     try {
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/document/XMLToXTalk.java b/jVinci/src/main/java/org/apache/vinci/transport/document/XMLToXTalk.java
index 2b96552..54d4202 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/document/XMLToXTalk.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/document/XMLToXTalk.java
@@ -192,6 +192,12 @@
    * representation of that data. If xml_filename is non-null, then this method will also create a
    * UTF-8 representation of the xml file, exactly mimicing the XTalk encoding (e.g. removing
    * irrelevant whitespace, expanding entity refs, etc).
+   * @param r -
+   * @param filename -
+   * @param purgeWhitespace -
+   * @param xml_filename -
+   * @throws ServiceException -
+   * @throws IOException -
    */
   public static void xmlToXTalk(Reader r, String filename, boolean purgeWhitespace,
           String xml_filename) throws ServiceException, IOException {
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/document/XTalkToSAX.java b/jVinci/src/main/java/org/apache/vinci/transport/document/XTalkToSAX.java
index 2c972a7..65a6762 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/document/XTalkToSAX.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/document/XTalkToSAX.java
@@ -69,6 +69,7 @@
    * determine the size of these arrays with this method. This method in conjunction with
    * resetBuffers lets application implement their own buffer management. Buffers can be reset
    * during parsing, but not from another thread.
+   * @return -
    */
   public int bufferSize() {
     return byteBuffer.length;
@@ -78,6 +79,7 @@
    * Resets buffers to their initial size... this is useful because buffers can grow during parsing
    * and this allows the space to be reclaimed without having to undo references to the parser
    * object.
+   * @param toSize -
    */
   public void resizeBuffers(int toSize) {
     if (this.byteBuffer.length != toSize) {
@@ -92,6 +94,8 @@
    * the document. Use bufferSize() and resizeBuffers to manage memory in applications where very
    * large strings may be encountered and the same object is used to parse many incoming documents.
    * 
+   * @param is -
+   * @param handler -
    * @throws IOException
    *           if underlying IOException from the stream or if XTalk format is invalid.
    * @throws SAXException
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/util/Base64Converter.java b/jVinci/src/main/java/org/apache/vinci/transport/util/Base64Converter.java
index 2a97057..2d1950f 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/util/Base64Converter.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/util/Base64Converter.java
@@ -48,6 +48,8 @@
 
   /**
    * @pre from != null
+   * @param from -
+   * @return -
    */
   static public byte[] convertBinaryToBase64(byte[] from) {
     return convertBinaryToBase64(from, from.length, true);
@@ -55,13 +57,19 @@
 
   /**
    * @pre convert_me != null
+   * @param convert_me -
+   * @return -
    */
+  
   static public String convertStringToBase64String(String convert_me) {
     return new String(convertBinaryToBase64(convert_me.getBytes()));
   }
 
   /**
    * @pre base64 != null
+   * @param base64 -
+   * @return -
+   * @throws Base64FormatException -
    */
   static public String convertBase64StringToString(String base64) throws Base64FormatException {
     return new String(convertBase64ToBinary(base64.getBytes()));
@@ -69,6 +77,10 @@
 
   /**
    * @pre count &le; from.length
+   * @param from -
+   * @param count -
+   * @param line_breaks -
+   * @return -
    */
   static public byte[] convertBinaryToBase64(byte[] from, final int count, boolean line_breaks) {
     int size = calculateBase64OutputSize(count, line_breaks);
@@ -103,6 +115,9 @@
   /**
    * Calculates the size of the resulting Base64 string returned by this class for a binary byte
    * array of the specified length. Includes carriage returns and all.
+   * @param input_size -
+   * @param line_breaks -
+   * @return -
    */
   static public int calculateBase64OutputSize(int input_size, boolean line_breaks) {
     int q = input_size / 3;
@@ -120,6 +135,9 @@
 
   /**
    * @pre input != null
+   * @param input -
+   * @return -
+   * @throws Base64FormatException -
    */
   static public byte[] convertBase64ToBinary(byte[] input) throws Base64FormatException {
     return convertBase64ToBinary(input, input.length);
@@ -128,6 +146,10 @@
   /**
    * @pre input != null
    * @pre input_size &le; input.length
+   * @param input -
+   * @param input_size -
+   * @return -
+   * @throws Base64FormatException -
    */
   static public byte[] convertBase64ToBinary(byte[] input, final int input_size)
           throws Base64FormatException {
@@ -147,6 +169,10 @@
    * 
    * @pre input != null
    * @pre input_size &le; input.length
+   * @param input -
+   * @param input_size -
+   * @return -
+   * @throws Base64FormatException -
    */
   static public int calculateBinaryOutputSize(byte[] input, final int input_size)
           throws Base64FormatException {
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/util/StreamMaterializer.java b/jVinci/src/main/java/org/apache/vinci/transport/util/StreamMaterializer.java
index 04730be..e295515 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/util/StreamMaterializer.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/util/StreamMaterializer.java
@@ -40,9 +40,11 @@
    * Bring the entire contents of the provided stream into a memory-resident byte array. Does NOT
    * close the stream.
    * 
+   * @param input_stream -
+   * @return -
+   * @throws IOException -
    * @exception IOException
    *              thrown by the input stream.
-   * 
    * @pre input_stream != null
    */
   public static final byte[] materialize(InputStream input_stream) throws IOException {
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/util/TransportableConverter.java b/jVinci/src/main/java/org/apache/vinci/transport/util/TransportableConverter.java
index abbc1f2..76eb991 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/util/TransportableConverter.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/util/TransportableConverter.java
@@ -46,7 +46,7 @@
    * @param factory
    *          The factory used to create the return Transportable, which must implement
    *          fromStream().
-   * 
+   * @return -
    * @pre convert_me != null
    * @pre factory != null
    */
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/util/XMLConverter.java b/jVinci/src/main/java/org/apache/vinci/transport/util/XMLConverter.java
index fd52230..e362d96 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/util/XMLConverter.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/util/XMLConverter.java
@@ -35,7 +35,7 @@
    * Convert to XML string format. Uses CDATA encoding if there are more than 4 characters requiring
    * ampersand encoding.
    * 
-   * @param convert_me
+   * @param convert_me -
    * @return the converted string
    * @pre convert_me != null
    */
@@ -48,7 +48,7 @@
   /**
    * Convert to XML string format without ever using CDATA encoding.
    * 
-   * @param convert_me
+   * @param convert_me -
    * @return the converted string
    * 
    * @pre convert_me != null
@@ -61,8 +61,8 @@
 
   /**
    * 
-   * @param convert_me
-   * @param append_to_me
+   * @param convert_me -
+   * @param append_to_me -
    * 
    * @pre convert_me != null
    * @pre append_to_me != null
@@ -92,8 +92,8 @@
   }
 
   /**
-   * @param convert_me
-   * @param append_to_me
+   * @param convert_me -
+   * @param append_to_me -
    * 
    * @pre convert_me != null
    * @pre append_to_me != null
@@ -131,6 +131,8 @@
   }
 
   /**
+   * @param convert_me -
+   * @return -
    * @pre convert_me != null
    */
   static public String convertStringToHTMLString(String convert_me) {
@@ -141,8 +143,8 @@
 
   /**
    * 
-   * @param convert_me
-   * @param append_to_me
+   * @param convert_me -
+   * @param append_to_me -
    * 
    * @pre convert_me != null
    * @pre append_to_me != null
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/vns/client/ResolveResult.java b/jVinci/src/main/java/org/apache/vinci/transport/vns/client/ResolveResult.java
index 46289c6..45bec68 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/vns/client/ResolveResult.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/vns/client/ResolveResult.java
@@ -53,6 +53,8 @@
    * Strip the qualifications from this qualified service name.
    * 
    * @pre service_name != null
+   * @param service_name -
+   * @return -
    */
   static public String unqualifiedName(String service_name) {
     if (isQualified(service_name)) {
@@ -69,6 +71,8 @@
    * are explicitly specified.)
    * 
    * @pre service_name != null
+   * @param service_name -
+   * @return -
    */
   static public boolean isQualified(String service_name) {
     if (service_name.indexOf('[') != -1) {
@@ -82,6 +86,8 @@
    * accepts either qualified or unqualified service names.
    * 
    * @pre service_name != null
+   * @param service_name -
+   * @return -
    */
   static public Frame composeQuery(String service_name) {
     VinciFrame query = new VinciFrame();
@@ -121,6 +127,9 @@
    * unqualified service names.
    * 
    * @pre service_name != null
+   * @param service_name -
+   * @param mypriority -
+   * @return -
    */
   static public Frame composeQuery(String service_name, int mypriority) {
     VinciFrame query = (VinciFrame) composeQuery(service_name);
@@ -149,6 +158,7 @@
 
   /**
    * Determine if there are more service listing to be fetched.
+   * @return -
    */
   public boolean hasMore() {
     return (current - begin < services.size());
@@ -158,6 +168,7 @@
    * Fetch the next service listing.
    * 
    * @pre hasMore()
+   * @return -
    */
   public ServiceLocator getNext() {
     ServiceLocator return_me = (ServiceLocator) services.get(current % services.size());
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/vns/client/ServeonResult.java b/jVinci/src/main/java/org/apache/vinci/transport/vns/client/ServeonResult.java
index 426329c..1f89a62 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/vns/client/ServeonResult.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/vns/client/ServeonResult.java
@@ -48,6 +48,12 @@
    * @pre host_name != null
    * @pre priority &ge; -1
    * @pre instance &ge; 0
+   * @param service_name -
+   * @param host_name -
+   * @param priority -
+   * @param instance -
+   * @return -
+   * 
    */
   static public Transportable composeQuery(String service_name, String host_name, int priority,
           int instance) {
@@ -63,6 +69,10 @@
    * @pre service_name != null
    * @pre host_name != null
    * @pre priority &ge; -1
+   * @param service_name -
+   * @param host_name -
+   * @param priority -
+   * @return -
    */
   static public Transportable composeQuery(String service_name, String host_name, int priority) {
     VinciFrame query = (VinciFrame) composeQuery(service_name, host_name);
@@ -76,6 +86,9 @@
    * 
    * @pre service_name != null
    * @pre host_name != null
+   * @param service_name -
+   * @param host_name -
+   * @return -
    */
   static public Transportable composeQuery(String service_name, String host_name) {
     VinciFrame query = new VinciFrame();
diff --git a/jVinci/src/main/java/org/apache/vinci/transport/vns/client/VNSConfig.java b/jVinci/src/main/java/org/apache/vinci/transport/vns/client/VNSConfig.java
index 8ea77ca..4fef50c 100644
--- a/jVinci/src/main/java/org/apache/vinci/transport/vns/client/VNSConfig.java
+++ b/jVinci/src/main/java/org/apache/vinci/transport/vns/client/VNSConfig.java
@@ -36,6 +36,7 @@
    * before ever invoking any Vinci client code. Otherwise, you can set the hostname using the
    * setHost() method provided by this class.
    * 
+   * @return -
    * @deprecated Use VinciContext.getVNSHost() instead.
    * @throws IllegalStateException
    *           if no VNS host has been specified.
@@ -54,6 +55,7 @@
    * Otherwise, the port will default to 9000. You can override this default (or any
    * property-specified value) by calling the setPort() method provided by this class.
    * 
+   * @return -
    * @deprecated Use VinciContext.getVNSPort() instead.
    */
   @Deprecated
@@ -65,6 +67,7 @@
    * Set the VNS hostname. Explicitly setting the VNS hostname using this method will override any
    * hostname set via the VNS_HOST java property.
    * 
+   * @param h -
    * @deprecated Use VinciContext.setVNSHost() instead.
    */
   @Deprecated
@@ -76,6 +79,7 @@
    * Set the VNS port. Explicitly setting the VNS hostname using this method will override any port
    * number set via the VNS_PORT java property.
    * 
+   * @param p -
    * @deprecated Use VinciContext.setVNSPort() instead.
    */
   @Deprecated
