diff --git a/configure.ac b/configure.ac
index 0120697..02defd3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,22 +25,11 @@
 ## -----------------------------------------------
 ## Define the Version variables
 ## -----------------------------------------------
-CMS_LIBRARY_NAME=cms
-CMS_VERSION=1.2
-CMS_LIBRARY_VERSION=0:0:0
-CMS_RELEASE=0.0
-CMS_API_VERSION=${CMS_VERSION}
 
-AC_SUBST(CMS_LIBRARY_NAME)
-AC_SUBST(CMS_VERSION)
-AC_SUBST(CMS_LIBRARY_VERSION)
-AC_SUBST(CMS_RELEASE)
-AC_SUBST(CMS_API_VERSION)
+PACKAGE=cms
+PACKAGE_VERSION=1.2
 
-PACKAGE=$CMS_LIBRARY_NAME
-VERSION=$CMS_VERSION
-
-AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
+AM_INIT_AUTOMAKE($PACKAGE, $PACKAGE_VERSION, no-define)
 AM_CONFIG_HEADER(config.h)
 
 ## -----------------------------------------------
@@ -72,7 +61,7 @@
 DX_XML_FEATURE(OFF)
 DX_PDF_FEATURE(OFF)
 DX_PS_FEATURE(OFF)
-DX_INIT_DOXYGEN(cms, doxygen.cfg, doc)
+DX_INIT_DOXYGEN([$PACKAGE], [doxygen.cfg], [doc])
 
 
 ## -----------------------------------------------------
diff --git a/doxygen.cfg b/doxygen.cfg
index 4485755..735cc0f 100644
--- a/doxygen.cfg
+++ b/doxygen.cfg
@@ -25,7 +25,6 @@
 OUTPUT_DIRECTORY       = $(DOCDIR)
 CREATE_SUBDIRS         = NO
 OUTPUT_LANGUAGE        = English
-USE_WINDOWS_ENCODING   = NO
 BRIEF_MEMBER_DESC      = YES
 REPEAT_BRIEF           = YES
 ABBREVIATE_BRIEF       = 
@@ -218,8 +217,7 @@
 DOT_IMAGE_FORMAT       = png
 DOT_PATH               = $(DOT_PATH)
 DOTFILE_DIRS           = 
-MAX_DOT_GRAPH_WIDTH    = 1024
-MAX_DOT_GRAPH_HEIGHT   = 1024
+DOT_GRAPH_MAX_NODES    = 50
 MAX_DOT_GRAPH_DEPTH    = 0
 GENERATE_LEGEND        = YES
 DOT_CLEANUP            = YES
diff --git a/src/main/Makefile.am b/src/main/Makefile.am
index 47ce394..bb15ebb 100644
--- a/src/main/Makefile.am
+++ b/src/main/Makefile.am
@@ -44,5 +44,5 @@
 ##
 ## Packaging Info
 ##
-library_includedir=$(includedir)/$(CMS_LIBRARY_NAME)-$(CMS_VERSION)
+library_includedir=$(includedir)/$(PACKAGE)-$(PACKAGE_VERSION)
 nobase_library_include_HEADERS = $(h_sources)
diff --git a/src/main/cms/BytesMessage.h b/src/main/cms/BytesMessage.h
index 74b04f4..e603caa 100644
--- a/src/main/cms/BytesMessage.h
+++ b/src/main/cms/BytesMessage.h
@@ -23,6 +23,9 @@
 
 namespace cms{
 
+    /**
+     * A message used for sending a stream of uninterpreted bytes.
+     */
     class CMS_API BytesMessage : public Message{
     public:
 
@@ -30,8 +33,11 @@
 
         /**
          * sets the bytes given to the message body.
-         * @param Byte Buffer to copy
-         * @param Number of bytes in Buffer to copy
+         * 
+         * @param buffer 
+         *      Byte Buffer to copy
+         * @param numBytes 
+         *      Number of bytes in Buffer to copy
          * @throws CMSException
          */
         virtual void setBodyBytes(
@@ -43,12 +49,14 @@
          * copy this data into a user allocated buffer.  Call
          * <code>getBodyLength</code> to determine the number of bytes
          * to expect.
+         * 
          * @return const pointer to a byte buffer
          */
         virtual const unsigned char* getBodyBytes() const = 0;
 
         /**
          * Returns the number of bytes contained in the body of this message.
+         * 
          * @return number of bytes.
          */
         virtual std::size_t getBodyLength() const = 0;
@@ -56,6 +64,7 @@
         /**
          * Puts the message body in read-only mode and repositions the stream
          * of bytes to the beginning.
+         * 
          * @throws CMSException
          */
         virtual void reset() throw ( cms::CMSException ) = 0;
@@ -63,6 +72,7 @@
         /**
          * Reads a Boolean from the Bytes message stream
          * @returns boolean value from stream
+         * 
          * @throws CMSException
          */
         virtual bool readBoolean() const throw ( cms::CMSException ) = 0;
@@ -71,13 +81,16 @@
          * Writes a boolean to the bytes message stream as a 1-byte value.
          * The value true is written as the value (byte)1; the value false
          * is written as the value (byte)0.
-         * @param value - boolean to write to the stream
+         * 
+         * @param value 
+         *      boolean to write to the stream
          * @throws CMSException
          */
         virtual void writeBoolean( bool value ) throw ( cms::CMSException ) = 0;
 
         /**
          * Reads a Byte from the Bytes message stream
+         * 
          * @returns unsigned char value from stream
          * @throws CMSException
          */
@@ -85,7 +98,9 @@
 
         /**
          * Writes a byte to the bytes message stream as a 1-byte value
-         * @param value - byte to write to the stream
+         * 
+         * @param value 
+         *      byte to write to the stream
          * @throws CMSException
          */
         virtual void writeByte( unsigned char value ) throw ( cms::CMSException ) = 0;
@@ -103,7 +118,8 @@
          * length of the vector, indicating that there are no more bytes left to
          * be read from the stream. The next read of the stream returns -1.
          *
-         * @param value - buffer to place data in
+         * @param value 
+         *      buffer to place data in
          * @returns the total number of bytes read into the buffer, or -1 if
          *          there is no more data because the end of the stream has
          *          been reached
@@ -115,7 +131,9 @@
         /**
          * Writes a byte array to the bytes message stream using the vector
          * size as the number of bytes to write.
-         * @param value - bytes to write to the stream
+         * 
+         * @param value 
+         *      bytes to write to the stream
          * @throws CMSException
          */
         virtual void writeBytes( const std::vector<unsigned char>& value )
@@ -138,9 +156,11 @@
          * array value, then an IndexOutOfBoundsException is thrown. No bytes
          * will be read from the stream for this exception case.
          *
-         * @param value - the buffer into which the data is read
-         * @param length - the number of bytes to read; must be less than or
-         *                 equal to value.length
+         * @param buffer 
+         *      the buffer into which the data is read
+         * @param length 
+         *      the number of bytes to read; must be less than or equal to 
+         *      value.length
          * @returns the total number of bytes read into the buffer, or -1 if
          *          there is no more data because the end of the stream has
          *          been reached
@@ -152,9 +172,13 @@
         /**
          * Writes a portion of a byte array to the bytes message stream.
          * size as the number of bytes to write.
-         * @param value - bytes to write to the stream
-         * @param offset - the initial offset within the byte array
-         * @param length - the number of bytes to use
+         * 
+         * @param value 
+         *      bytes to write to the stream
+         * @param offset 
+         *      the initial offset within the byte array
+         * @param length 
+         *      the number of bytes to use
          * @throws CMSException
          */
         virtual void writeBytes( const unsigned char* value,
@@ -163,6 +187,7 @@
 
         /**
          * Reads a Char from the Bytes message stream
+         * 
          * @returns char value from stream
          * @throws CMSException
          */
@@ -170,13 +195,16 @@
 
         /**
          * Writes a char to the bytes message stream as a 1-byte value
-         * @param value - char to write to the stream
+         * 
+         * @param value
+         *      char to write to the stream
          * @throws CMSException
          */
         virtual void writeChar( char value ) throw ( cms::CMSException ) = 0;
 
         /**
          * Reads a 32 bit float from the Bytes message stream
+         * 
          * @returns double value from stream
          * @throws CMSException
          */
@@ -184,13 +212,15 @@
 
         /**
          * Writes a float to the bytes message stream as a 4 byte value
-         * @param value - float to write to the stream
+         * @param value 
+         *      float to write to the stream
          * @throws CMSException
          */
         virtual void writeFloat( float value ) throw ( cms::CMSException ) = 0;
 
         /**
          * Reads a 64 bit double from the Bytes message stream
+         * 
          * @returns double value from stream
          * @throws CMSException
          */
@@ -198,13 +228,15 @@
 
         /**
          * Writes a double to the bytes message stream as a 8 byte value
-         * @param value - double to write to the stream
+         * @param value 
+         *      double to write to the stream
          * @throws CMSException
          */
         virtual void writeDouble( double value ) throw ( cms::CMSException ) = 0;
 
         /**
          * Reads a 16 bit signed short from the Bytes message stream
+         * 
          * @returns short value from stream
          * @throws CMSException
          */
@@ -212,13 +244,16 @@
 
         /**
          * Writes a signed short to the bytes message stream as a 2 byte value
-         * @param value - signed short to write to the stream
+         * 
+         * @param value 
+         *      signed short to write to the stream
          * @throws CMSException
          */
         virtual void writeShort( short value ) throw ( cms::CMSException ) = 0;
 
         /**
          * Reads a 16 bit unsigned short from the Bytes message stream
+         * 
          * @returns unsigned short value from stream
          * @throws CMSException
          */
@@ -226,13 +261,16 @@
 
         /**
          * Writes a unsigned short to the bytes message stream as a 2 byte value
-         * @param value - unsigned short to write to the stream
+         * 
+         * @param value 
+         *      unsigned short to write to the stream
          * @throws CMSException
          */
         virtual void writeUnsignedShort( unsigned short value ) throw ( cms::CMSException ) = 0;
 
         /**
          * Reads a 32 bit signed intger from the Bytes message stream
+         * 
          * @returns int value from stream
          * @throws CMSException
          */
@@ -240,13 +278,16 @@
 
         /**
          * Writes a signed int to the bytes message stream as a 4 byte value
-         * @param value - signed int to write to the stream
+         * 
+         * @param value 
+         *      signed int to write to the stream
          * @throws CMSException
          */
         virtual void writeInt( int value ) throw ( cms::CMSException ) = 0;
 
         /**
          * Reads a 64 bit long from the Bytes message stream
+         * 
          * @returns long long value from stream
          * @throws CMSException
          */
@@ -254,13 +295,16 @@
 
         /**
          * Writes a long long to the bytes message stream as a 8 byte value
-         * @param value - signed long long to write to the stream
+         * 
+         * @param value 
+         *      signed long long to write to the stream
          * @throws CMSException
          */
         virtual void writeLong( long long value ) throw ( cms::CMSException ) = 0;
 
         /**
          * Reads an ASCII String from the Bytes message stream
+         * 
          * @returns String from stream
          * @throws CMSException
          */
@@ -268,13 +312,16 @@
 
         /**
          * Writes an ASCII String to the Bytes message stream
-         * @param value - String to write to the stream
+         * 
+         * @param value 
+         *      String to write to the stream
          * @throws CMSException
          */
         virtual void writeString( const std::string& value ) throw ( cms::CMSException ) = 0;
 
         /**
          * Reads an UTF String from the BytesMessage stream
+         * 
          * @returns String from stream
          * @throws CMSException
          */
@@ -282,11 +329,17 @@
 
         /**
          * Writes an UTF String to the BytesMessage stream
-         * @param value - String to write to the stream
+         * 
+         * @param value 
+         *      String to write to the stream
          * @throws CMSException
          */
         virtual void writeUTF( const std::string& value ) throw ( cms::CMSException ) = 0;
 
+        /**
+         * Clones this message.
+         * @return a deep copy of this message.
+         */
         virtual BytesMessage* clone() const = 0;
 
    };
diff --git a/src/main/cms/CMSException.h b/src/main/cms/CMSException.h
index 381d67b..09ccf77 100644
--- a/src/main/cms/CMSException.h
+++ b/src/main/cms/CMSException.h
@@ -42,14 +42,18 @@
         
         /**
          * Gets the cause of the error.
+         * 
          * @return string errors message
          */
         virtual std::string getMessage() const = 0;
         
         /**
          * Adds a file/line number to the stack trace.
-         * @param file The name of the file calling this method (use __FILE__).
-         * @param lineNumber The line number in the calling file (use __LINE__).
+         * 
+         * @param file 
+         *      The name of the file calling this method (use __FILE__).
+         * @param lineNumber 
+         *      The line number in the calling file (use __LINE__).
          */
         virtual void setMark( const char* file, const int lineNumber ) = 0;
         
@@ -57,6 +61,7 @@
          * Clones this exception.  This is useful for cases where you need
          * to preserve the type of the original exception as well as the message.
          * All subclasses should override.
+         * 
          * @return Copy of this Exception object
          */
         virtual CMSException* clone() const = 0;
@@ -64,6 +69,7 @@
         /**
          * Provides the stack trace for every point where
          * this exception was caught, marked, and rethrown.
+         * 
          * @return vector containing stack trace strings
          */
         virtual std::vector< std::pair< std::string, int> > getStackTrace() const = 0;
@@ -75,12 +81,14 @@
         
         /**
          * Prints the stack trace to the given output stream.
+         * 
          * @param stream the target output stream.
          */
         virtual void printStackTrace( std::ostream& stream ) const = 0;
         
         /**
          * Gets the stack trace as one contiguous string.
+         * 
          * @return string with formatted stack trace data
          */
         virtual std::string getStackTraceString() const = 0;
diff --git a/src/main/cms/CMSProperties.h b/src/main/cms/CMSProperties.h
index c5c6468..c2c5a5e 100644
--- a/src/main/cms/CMSProperties.h
+++ b/src/main/cms/CMSProperties.h
@@ -36,25 +36,30 @@
 
         /**
          * Returns true if the properties object is empty
+         * 
          * @return true if empty
          */
         virtual bool isEmpty() const = 0;
 
         /**
          * Looks up the value for the given property.
-         * @param name The name of the property to be looked up.
+         * 
+         * @param name 
+         *      The name of the property to be looked up.
          * @return the value of the property with the given name, if it
-         * exists.  If it does not exist, returns NULL.
+         *         exists.  If it does not exist, returns NULL.
          */
         virtual const char* getProperty( const std::string& name ) const = 0;
 
         /**
          * Looks up the value for the given property.
-         * @param name the name of the property to be looked up.
-         * @param defaultValue The value to be returned if the given
-         * property does not exist.
+         * 
+         * @param name 
+         *      the name of the property to be looked up.
+         * @param defaultValue 
+         *      The value to be returned if the given property does not exist.
          * @return The value of the property specified by <code>name</code>, if it
-         * exists, otherwise the <code>defaultValue</code>.
+         *         exists, otherwise the <code>defaultValue</code>.
          */
         virtual std::string getProperty(
             const std::string& name,
@@ -63,8 +68,11 @@
         /**
          * Sets the value for a given property.  If the property already
          * exists, overwrites the value.
-         * @param name The name of the value to be written.
-         * @param value The value to be written.
+         * 
+         * @param name 
+         *      The name of the value to be written.
+         * @param value 
+         *      The value to be written.
          */
         virtual void setProperty(
             const std::string& name,
@@ -72,33 +80,41 @@
 
         /**
          * Check to see if the Property exists in the set
-         * @param name the name of the property to check
+         * 
+         * @param name 
+         *      the name of the property to check
          * @return true if property exists, false otherwise.
          */
         virtual bool hasProperty( const std::string& name ) const = 0;
 
         /**
          * Removes the property with the given name.
-         * @param name the name of the property to be removed.s
+         * 
+         * @param name 
+         *      the name of the property to be removed.s
          */
         virtual void remove( const std::string& name ) = 0;
 
         /**
          * Method that serializes the contents of the property map to
          * an arryay.
+         * 
          * @return list of pairs where the first is the name and the second
-         * is the value.
+         *         is the value.
          */
         virtual std::vector< std::pair< std::string, std::string > > toArray() const = 0;
 
         /**
          * Copies the contents of the given properties object to this one.
-         * @param source The source properties object.
+         * 
+         * @param source 
+         *      The source properties object.
          */
         virtual void copy( const CMSProperties* source ) = 0;
 
         /**
          * Clones this object.
+         * 
          * @returns a replica of this object.
          */
         virtual CMSProperties* clone() const = 0;
@@ -111,6 +127,7 @@
         /**
          * Formats the contents of the Properties Object into a string
          * that can be logged, etc.
+         * 
          * @returns string value of this object.
          */
         virtual std::string toString() const = 0;
diff --git a/src/main/cms/Closeable.h b/src/main/cms/Closeable.h
index 57d3214..f679326 100644
--- a/src/main/cms/Closeable.h
+++ b/src/main/cms/Closeable.h
@@ -35,6 +35,7 @@
         /**
          * Closes this object and deallocates the appropriate resources.
          * The object is generally no longer usable after calling close.
+         * 
          * @throws CMSException
          */
         virtual void close() throw( CMSException ) = 0;
diff --git a/src/main/cms/Connection.h b/src/main/cms/Connection.h
index 08fb9f6..ade166d 100644
--- a/src/main/cms/Connection.h
+++ b/src/main/cms/Connection.h
@@ -28,6 +28,9 @@
 {
     class ExceptionListener;
    
+    /**
+     * The client's connection to its provider.
+     */
     class CMS_API Connection :
         public Startable,
         public Stoppable,
@@ -41,12 +44,14 @@
          * Closes this connection as well as any Sessions 
          * created from it (and those Sessions' consumers and
          * producers).
+         * 
          * @throws CMSException
          */
         virtual void close() throw( CMSException ) = 0;
 
 		/**
          * Creates an AUTO_ACKNOWLEDGE Session.
+         * 
          * @throws CMSException
          */
         virtual Session* createSession() throw ( CMSException ) = 0;
@@ -54,7 +59,9 @@
         /**
          * Creates a new Session to work for this Connection using the
          * specified acknowledgment mode
-         * @param the Acknowledgement Mode to use.
+         * 
+         * @param ackMode
+         *      the Acknowledgement Mode to use.
          * @throws CMSException
          */
         virtual Session* createSession( Session::AcknowledgeMode ackMode ) 
@@ -62,19 +69,23 @@
 
         /**
          * Get the Client Id for this session
+         * 
          * @return Client Id String
          */
         virtual std::string getClientID() const = 0;      
 
         /**
          * Gets the registered Exception Listener for this connection
+         * 
          * @return pointer to an exception listnener or NULL
          */
         virtual ExceptionListener* getExceptionListener() const = 0;
 
         /**
          * Sets the registed Exception Listener for this connection
-         * @param pointer to and <code>ExceptionListener</code>
+         * 
+         * @param listener
+         *      pointer to and <code>ExceptionListener</code>
          */
         virtual void setExceptionListener( ExceptionListener* listener ) = 0;
 
diff --git a/src/main/cms/ConnectionFactory.h b/src/main/cms/ConnectionFactory.h
index 059a5c2..b896282 100644
--- a/src/main/cms/ConnectionFactory.h
+++ b/src/main/cms/ConnectionFactory.h
@@ -40,6 +40,7 @@
          * connection is created in stopped mode. No messages will be
          * delivered until the Connection.start method is explicitly
          * called.
+         * 
          * @return Pointer to a connection object, caller owns the pointer
          * @throws CMSException
          */
@@ -53,8 +54,11 @@
          * change the defaults, subsequent calls to the parameterless
          * createConnection will continue to use the default values that
          * were set in the Constructor.
-         * @param username to authenticate with
-         * @param password to authenticate with
+         * 
+         * @param username 
+         *      to authenticate with
+         * @param password 
+         *      to authenticate with
          * @returns a Connection Pointer
          * @throws CMSException
          */
@@ -70,10 +74,14 @@
          * change the defaults, subsequent calls to the parameterless
          * createConnection will continue to use the default values that
          * were set in the Constructor.
-         * @param username to authenticate with
-         * @param password to authenticate with
-         * @param clientId to assign to connection if "" then a random cleint
-         *        Id is created for this connection.
+         * 
+         * @param username 
+         *      to authenticate with
+         * @param password 
+         *      to authenticate with
+         * @param clientId 
+         *      to assign to connection if "" then a random client Id is 
+         *      created for this connection.
          * @returns a Connection Pointer
          * @throws CMSException
          */
diff --git a/src/main/cms/Destination.h b/src/main/cms/Destination.h
index 3b2bb2b..6607056 100644
--- a/src/main/cms/Destination.h
+++ b/src/main/cms/Destination.h
@@ -48,6 +48,7 @@
       
         /**
          * Retrieve the Destination Type for this Destination
+         * 
          * @return The Destination Type
          */
         virtual DestinationType getDestinationType() const = 0;
@@ -58,6 +59,7 @@
          * uniquely identify a particular destination.  For example, a topic
          * and a queue both named "FOO" must not have equivalent provider
          * strings.
+         * 
          * @return Provider specific Name
          */
         virtual std::string toProviderString() const = 0;
@@ -65,20 +67,24 @@
         /**
          * Creates a new instance of this destination type that is a
          * copy of this one, and returns it.
+         * 
          * @returns cloned copy of this object
          */
         virtual cms::Destination* clone() const = 0;
       
         /**
          * Copies the contents of the given Destinastion object to this one.
-         * @param source The source Destination object.
+         * 
+         * @param source 
+         *      The source Destination object.
          */
         virtual void copy( const cms::Destination& source ) = 0;
 
         /**
          * Retrieve any properties that might be part of the destination
          * that was specified.  This is a deviation from the JMS spec
-         * but necessary due to C++ restrictions.  
+         * but necessary due to C++ restrictions.
+         * 
          * @return const reference to a properties object.
          */
         virtual const CMSProperties& getCMSProperties() const = 0;
diff --git a/src/main/cms/ExceptionListener.h b/src/main/cms/ExceptionListener.h
index ef112f3..17f9ff7 100644
--- a/src/main/cms/ExceptionListener.h
+++ b/src/main/cms/ExceptionListener.h
@@ -23,6 +23,11 @@
 
 namespace cms{
 
+    /**
+     * If a CMS provider detects a serious problem, it notifies the client
+     * application through an <code>ExceptionListener</code> that is registered
+     * with the <code>Connection</code>.
+     */
     class CMS_API ExceptionListener
     {
     public:
@@ -33,7 +38,9 @@
          * Called when an exception occurs.  Once notified of an exception
          * the caller should no longer use the resource that generated the
          * exception.
-         * @param Exception Object that occurred.
+         * 
+         * @param ex
+         *      Exception Object that occurred.
          */
         virtual void onException( const cms::CMSException& ex ) = 0;
       
diff --git a/src/main/cms/MapMessage.h b/src/main/cms/MapMessage.h
index 29c6e62..2a88348 100644
--- a/src/main/cms/MapMessage.h
+++ b/src/main/cms/MapMessage.h
@@ -46,6 +46,7 @@
         /**
          * Returns an Enumeration of all the names in the MapMessage 
          * object.
+         * 
          * @return STL Vector of String values, each of which is the 
          *         name of an item in the MapMessage
          * @throws CMSException
@@ -54,14 +55,18 @@
 
         /**
          * Indicates whether an item exists in this MapMessage object.
-         * @param name - String name of the Object in question
+         * 
+         * @param name
+         *      String name of the Object in question
          * @return boolean value indicating if the name is in the map
          */
         virtual bool itemExists( const std::string& name ) const = 0;
         
         /**
          * Returns the Boolean value of the Specified name
-         * @param name of the value to fetch from the map
+         * 
+         * @param name
+         *      Name of the value to fetch from the map
          * @throws CMSException
          */
         virtual bool getBoolean( const std::string& name ) const 
@@ -69,8 +74,11 @@
         
         /** 
          * Sets a boolean value with the specified name into the Map.
-         * @param name - the name of the boolean
-         * @param value - the boolean value to set in the Map
+         * 
+         * @param name
+         *      the name of the boolean
+         * @param value
+         *      the boolean value to set in the Map
          * @throws CMSException
          */
         virtual void setBoolean( const std::string& name,
@@ -78,7 +86,9 @@
 
         /**
          * Returns the Byte value of the Specified name
-         * @param name of the value to fetch from the map
+         * 
+         * @param name
+         *      Name of the value to fetch from the map
          * @throws CMSException
          */
         virtual unsigned char getByte( const std::string& name ) const 
@@ -86,8 +96,11 @@
         
         /** 
          * Sets a Byte value with the specified name into the Map.
-         * @param name - the name of the Byte
-         * @param value - the Byte value to set in the Map
+         * 
+         * @param name
+         *      the name of the Byte
+         * @param value
+         *      the Byte value to set in the Map
          * @throws CMSException
          */
         virtual void setByte( const std::string& name,
@@ -95,7 +108,9 @@
 
         /**
          * Returns the Bytes value of the Specified name
-         * @param name of the value to fetch from the map
+         * 
+         * @param name 
+         *      Name of the value to fetch from the map
          * @throws CMSException
          */
         virtual std::vector<unsigned char> getBytes( const std::string& name ) const
@@ -103,8 +118,11 @@
         
         /** 
          * Sets a Bytes value with the specified name into the Map.
-         * @param name - the name of the Bytes
-         * @param value - the Bytes value to set in the Map
+         * 
+         * @param name
+         *      The name of the Bytes
+         * @param value
+         *      The Bytes value to set in the Map
          * @throws CMSException
          */
         virtual void setBytes( const std::string& name,
@@ -113,7 +131,9 @@
 
         /**
          * Returns the Char value of the Specified name
-         * @param name of the value to fetch from the map
+         * 
+         * @param name
+         *      name of the value to fetch from the map
          * @throws CMSException
          */
         virtual char getChar( const std::string& name ) const 
@@ -121,8 +141,11 @@
         
         /** 
          * Sets a Char value with the specified name into the Map.
-         * @param name - the name of the Char
-         * @param value - the Char value to set in the Map
+         * 
+         * @param name
+         *      the name of the Char
+         * @param value
+         *      the Char value to set in the Map
          * @throws CMSException
          */
         virtual void setChar( const std::string& name, char value ) 
@@ -130,7 +153,9 @@
 
         /**
          * Returns the Double value of the Specified name
-         * @param name of the value to fetch from the map
+         * 
+         * @param name 
+         *      Name of the value to fetch from the map
          * @throws CMSException
          */
         virtual double getDouble( const std::string& name ) const 
@@ -138,8 +163,11 @@
         
         /** 
          * Sets a Double value with the specified name into the Map.
-         * @param name - the name of the Double
-         * @param value - the Double value to set in the Map
+         * 
+         * @param name
+         *      The name of the Double
+         * @param value
+         *      The Double value to set in the Map
          * @throws CMSException
          */
         virtual void setDouble( const std::string& name,
@@ -147,7 +175,9 @@
 
         /**
          * Returns the Float value of the Specified name
-         * @param name of the value to fetch from the map
+         * 
+         * @param name 
+         *      Name of the value to fetch from the map
          * @throws CMSException
          */
         virtual float getFloat( const std::string& name ) const 
@@ -155,8 +185,11 @@
         
         /** 
          * Sets a Float value with the specified name into the Map.
-         * @param name - the name of the Float
-         * @param value - the Float value to set in the Map
+         * 
+         * @param name
+         *      The name of the Float
+         * @param value
+         *      The Float value to set in the Map
          * @throws CMSException
          */
         virtual void setFloat( const std::string& name, float value ) 
@@ -164,7 +197,9 @@
 
         /**
          * Returns the Int value of the Specified name
-         * @param name of the value to fetch from the map
+         * 
+         * @param name
+         *      Name of the value to fetch from the map
          * @throws CMSException
          */
         virtual int getInt( const std::string& name ) const
@@ -172,8 +207,11 @@
         
         /** 
          * Sets a Int value with the specified name into the Map.
-         * @param name - the name of the Int
-         * @param value - the Int value to set in the Map
+         * 
+         * @param name
+         *      The name of the Int
+         * @param value
+         *      The Int value to set in the Map
          * @throws CMSException
          */
         virtual void setInt( const std::string& name, int value ) 
@@ -181,7 +219,9 @@
 
         /**
          * Returns the Long value of the Specified name
-         * @param name of the value to fetch from the map
+         * 
+         * @param name 
+         *      Name of the value to fetch from the map
          * @throws CMSException
          */
         virtual long long getLong( const std::string& name ) const 
@@ -189,8 +229,11 @@
         
         /** 
          * Sets a Long value with the specified name into the Map.
-         * @param name - the name of the Long
-         * @param value - the Long value to set in the Map
+         * 
+         * @param name
+         *      The name of the Long
+         * @param value
+         *      The Long value to set in the Map
          * @throws CMSException
          */
         virtual void setLong( const std::string& name, long long value ) 
@@ -198,7 +241,9 @@
 
         /**
          * Returns the Short value of the Specified name
-         * @param name of the value to fetch from the map
+         * 
+         * @param name 
+         *      Name of the value to fetch from the map
          * @throws CMSException
          */
         virtual short getShort( const std::string& name ) const
@@ -206,8 +251,11 @@
         
         /** 
          * Sets a Short value with the specified name into the Map.
-         * @param name - the name of the Short
-         * @param value - the Short value to set in the Map
+         * 
+         * @param name
+         *      The name of the Short
+         * @param value
+         *      The Short value to set in the Map
          * @throws CMSException
          */
         virtual void setShort( const std::string& name, short value ) 
@@ -215,7 +263,9 @@
 
         /**
          * Returns the String value of the Specified name
-         * @param name of the value to fetch from the map
+         * 
+         * @param name 
+         *      Name of the value to fetch from the map
          * @throws CMSException
          */
         virtual std::string getString( const std::string& name ) const 
@@ -223,8 +273,11 @@
         
         /** 
          * Sets a String value with the specified name into the Map.
-         * @param name - the name of the String
-         * @param value - the String value to set in the Map
+         * 
+         * @param name
+         *      The name of the String
+         * @param value
+         *      The String value to set in the Map
          * @throws CMSException
          */
         virtual void setString( const std::string& name, 
diff --git a/src/main/cms/Message.h b/src/main/cms/Message.h
index 076931c..5e41a96 100644
--- a/src/main/cms/Message.h
+++ b/src/main/cms/Message.h
@@ -41,6 +41,7 @@
         /**
          * Clone this message exactly, returns a new instance that the
          * caller is required to delete.
+         * 
          * @return new copy of this message
          */
         virtual Message* clone() const = 0;                
@@ -87,6 +88,7 @@
         
         /**
          * Retrieves the propery names.
+         * 
          * @return The complete set of property names currently in this
          * message.
          */
@@ -94,14 +96,18 @@
         
         /**
          * Indicates whether or not a given property exists.
-         * @param name The name of the property to look up.
+         * 
+         * @param name 
+         *      The name of the property to look up.
          * @return True if the property exists in this message.
          */
         virtual bool propertyExists( const std::string& name ) const = 0;
         
         /**
          * Gets a boolean property.
-         * @param name The name of the property to retrieve.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
          * @return The value for the named property.
          * @throws CMSException if the property does not exist.
          */
@@ -110,7 +116,9 @@
             
         /**
          * Gets a byte property.
-         * @param name The name of the property to retrieve.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
          * @return The value for the named property.
          * @throws CMSException if the property does not exist.
          */
@@ -119,7 +127,9 @@
             
         /**
          * Gets a double property.
-         * @param name The name of the property to retrieve.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
          * @return The value for the named property.
          * @throws CMSException if the property does not exist.
          */
@@ -128,7 +138,9 @@
             
         /**
          * Gets a float property.
-         * @param name The name of the property to retrieve.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
          * @return The value for the named property.
          * @throws CMSException if the property does not exist.
          */
@@ -137,7 +149,9 @@
             
         /**
          * Gets a int property.
-         * @param name The name of the property to retrieve.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
          * @return The value for the named property.
          * @throws CMSException if the property does not exist.
          */
@@ -146,7 +160,9 @@
             
         /**
          * Gets a long property.
-         * @param name The name of the property to retrieve.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
          * @return The value for the named property.
          * @throws CMSException if the property does not exist.
          */
@@ -155,7 +171,9 @@
             
         /**
          * Gets a short property.
-         * @param name The name of the property to retrieve.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
          * @return The value for the named property.
          * @throws CMSException if the property does not exist.
          */
@@ -164,7 +182,9 @@
             
         /**
          * Gets a string property.
-         * @param name The name of the property to retrieve.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
          * @return The value for the named property.
          * @throws CMSException if the property does not exist.
          */
@@ -173,8 +193,11 @@
         
         /**
          * Sets a boolean property.
-         * @param name The name of the property to retrieve.
-         * @param value The value for the named property.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
+         * @param value 
+         *      The value for the named property.
          * @throws CMSException
          */
         virtual void setBooleanProperty( const std::string& name,
@@ -182,8 +205,11 @@
             
         /**
          * Sets a byte property.
-         * @param name The name of the property to retrieve.
-         * @param value The value for the named property.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
+         * @param value 
+         *      The value for the named property.
          * @throws CMSException
          */
         virtual void setByteProperty( const std::string& name,
@@ -191,8 +217,11 @@
             
         /**
          * Sets a double property.
-         * @param name The name of the property to retrieve.
-         * @param value The value for the named property.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
+         * @param value 
+         *      The value for the named property.
          * @throws CMSException
          */
         virtual void setDoubleProperty( const std::string& name,
@@ -200,8 +229,10 @@
             
         /**
          * Sets a float property.
-         * @param name The name of the property to retrieve.
-         * @param value The value for the named property.
+         * @param name 
+         *      The name of the property to retrieve.
+         * @param value 
+         *      The value for the named property.
          * @throws CMSException
          */
         virtual void setFloatProperty( const std::string& name,
@@ -209,8 +240,11 @@
             
         /**
          * Sets a int property.
-         * @param name The name of the property to retrieve.
-         * @param value The value for the named property.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
+         * @param value 
+         *      The value for the named property.
          * @throws CMSException
          */
         virtual void setIntProperty( const std::string& name,
@@ -218,8 +252,11 @@
             
         /**
          * Sets a long property.
-         * @param name The name of the property to retrieve.
-         * @param value The value for the named property.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
+         * @param value 
+         *      The value for the named property.
          * @throws CMSException
          */
         virtual void setLongProperty( const std::string& name,
@@ -227,8 +264,11 @@
             
         /**
          * Sets a short property.
-         * @param name The name of the property to retrieve.
-         * @param value The value for the named property.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
+         * @param value 
+         *      The value for the named property.
          * @throws CMSException
          */
         virtual void setShortProperty( const std::string& name,
@@ -236,8 +276,11 @@
             
         /**
          * Sets a string property.
-         * @param name The name of the property to retrieve.
-         * @param value The value for the named property.
+         * 
+         * @param name 
+         *      The name of the property to retrieve.
+         * @param value 
+         *      The value for the named property.
          * @throws CMSException
          */
         virtual void setStringProperty( const std::string& name,
@@ -284,12 +327,14 @@
          * values are not required to support byte[] values. The use of a byte[] 
          * value for CMSCorrelationID is non-portable.
          * 
-         * @param correlationId - the message ID of a message being referred to.
+         * @param correlationId
+         *      The message ID of a message being referred to.
          */
         virtual void setCMSCorrelationID( const std::string& correlationId ) = 0;
 
         /**
          * Gets the DeliveryMode for this message
+         * 
          * @return DeliveryMode enumerated value.
          */
         virtual int getCMSDeliveryMode() const = 0;
@@ -300,7 +345,8 @@
          * CMS providers set this field when a message is sent. This method can 
          * be used to change the value for a message that has been received.
          * 
-         * @param mode - DeliveryMode enumerated value.
+         * @param mode
+         *      DeliveryMode enumerated value.
          */
         virtual void setCMSDeliveryMode( int mode ) = 0;
       
@@ -327,7 +373,8 @@
          * CMS providers set this field when a message is sent. This method can 
          * be used to change the value for a message that has been received.
          * 
-         * @param destination - Destination Object
+         * @param destination
+         *      Destination Object
          */
         virtual void setCMSDestination( const Destination* destination ) = 0;
       
@@ -362,7 +409,8 @@
          * CMS providers set this field when a message is sent. This method can 
          * be used to change the value for a message that has been received.
          * 
-         * @param expireTime the message's expiration time
+         * @param expireTime 
+         *      the message's expiration time
          */
         virtual void setCMSExpiration( long long expireTime ) = 0;
       
@@ -403,7 +451,8 @@
          * CMS providers set this field when a message is sent. This method can 
          * be used to change the vaue for a message that has been received.
          * 
-         * @param id - the ID of the message
+         * @param id
+         *      the ID of the message
          */
         virtual void setCMSMessageID( const std::string& id ) = 0;
       
@@ -429,7 +478,8 @@
          * CMS providers set this field when a message is sent. This method can 
          * be used to change the value for a message that has been received.
          * 
-         * @param priority - priority value for this message
+         * @param priority
+         *      priority value for this message
          */
         virtual void setCMSPriority( int priority ) = 0;
 
@@ -450,7 +500,8 @@
          * This field is set at the time the message is delivered. This method 
          * can be used to change the value for a message that has been received.
          * 
-         * @param redelivered - boolean redelivered value
+         * @param redelivered
+         *      boolean redelivered value
          */
         virtual void setCMSRedelivered( bool redelivered ) = 0;
 
@@ -484,8 +535,8 @@
          * with a reply it has just received. The client can use the 
          * CMSCorrelationID header field for this purpose.
          * 
-         * @param destination - Destination to which to send a response to this 
-         * message
+         * @param destination
+         *      Destination to which to send a response to this message
          */
         virtual void setCMSReplyTo( const cms::Destination* destination ) = 0;
 
@@ -522,7 +573,8 @@
          * CMS providers set this field when a message is sent. This method can 
          * be used to change the value for a message that has been received.
          * 
-         * @param timeStamp - integer time stamp value
+         * @param timeStamp
+         *      integer time stamp value
          */
         virtual void setCMSTimestamp( long long timeStamp ) = 0;
 
@@ -559,7 +611,8 @@
          * literals are used, they may not be valid type names for some CMS 
          * providers.
          * 
-         * @param type the message type
+         * @param type 
+         *      the message type
          * @see getCMSType
          */
         virtual void setCMSType( const std::string& type ) = 0;
diff --git a/src/main/cms/MessageConsumer.h b/src/main/cms/MessageConsumer.h
index 5ee6c66..9de115b 100644
--- a/src/main/cms/MessageConsumer.h
+++ b/src/main/cms/MessageConsumer.h
@@ -25,7 +25,25 @@
 
 namespace cms
 {
-
+    /**
+     * A client uses a <code>MessageConsumer</code> to received messages
+     * from a destination.<br>
+     * <br>
+     * A client may either synchronously receive a message consumer's messages 
+     * or have the consumer asynchronously deliver them as they arrive. <br>
+     * <br>
+     * For synchronous receipt, a client can request the next message from a 
+     * message consumer using one of its <code>receive</code> methods. There are 
+     * several variations of <code>receive</code> that allow a client to poll or 
+     * wait for the next message.<br>  
+     * <br>
+     * For asynchronous delivery, a client can register a 
+     * <code>MessageListener</code> object with a message consumer. As messages 
+     * arrive at the message consumer, it delivers them by calling the 
+     * <code>MessageListener</code>'s <code>onMessage</code> method.
+     * 
+     * @see MessageListener
+     */
     class CMS_API MessageConsumer : public Closeable
     {
     public:
@@ -34,6 +52,7 @@
       
         /**
          * Synchronously Receive a Message
+         * 
          * @return new message
          * @throws CMSException
          */
@@ -42,6 +61,7 @@
         /**
          * Synchronously Receive a Message, time out after defined interval.
          * Returns null if nothing read.
+         * 
          * @return new message
          * @throws CMSException
          */
@@ -50,6 +70,7 @@
         /**
          * Receive a Message, does not wait if there isn't a new message
          * to read, returns NULL if nothing read.
+         * 
          * @return new message
          * @throws CMSException
          */
@@ -57,18 +78,22 @@
 
         /**
          * Sets the MessageListener that this class will send notifs on
-         * @param MessageListener interface pointer
+         * 
+         * @param listener 
+         *      The listener of messages received by this consumer.
          */
         virtual void setMessageListener( MessageListener* listener ) = 0;
       
         /**
          * Gets the MessageListener that this class will send notifs on
-         * @param MessageListener interface pointer
+         * 
+         * @return The listener of messages received by this consumer
          */
         virtual MessageListener* getMessageListener() const = 0;
       
         /**
          * Gets this message consumer's message selector expression.
+         * 
          * @return This Consumer's selector expression or "".
          * @throws cms::CMSException
          */
diff --git a/src/main/cms/MessageListener.h b/src/main/cms/MessageListener.h
index b20ea9c..d160a4d 100644
--- a/src/main/cms/MessageListener.h
+++ b/src/main/cms/MessageListener.h
@@ -24,6 +24,10 @@
     
     class Message;
     
+    /**
+     * A <code>MessageListener</code> object is used to receive asynchronously 
+     * delivered messages.
+     */
     class CMS_API MessageListener{
     public:
     
@@ -41,7 +45,8 @@
          * It is considered a programming error for this method to throw an
          * exception.
          * 
-         * @param Message object const pointer recipient does not own.
+         * @param message
+         *      Message object const pointer recipient does not own.
          */
         virtual void onMessage( const Message* message ) = 0;
 
diff --git a/src/main/cms/MessageProducer.h b/src/main/cms/MessageProducer.h
index 7282024..8dc1c5c 100644
--- a/src/main/cms/MessageProducer.h
+++ b/src/main/cms/MessageProducer.h
@@ -28,9 +28,26 @@
 namespace cms
 {
     /** 
-     * defines the <code>MessageProducer</code> interface that is used
-     * by all MessageProducer derivations.  This class defines the JMS
-     * spec'd interface for a MessageProducer.
+     * A client uses a <code>MessageProducer</code> object to send messages to 
+     * a destination. A <code>MessageProducer</code> object is created by 
+     * passing a <code>Destination</code> object to a message-producer creation 
+     * method supplied by a session.<br>
+     * <br>
+     * A client also has the option of creating a message producer without 
+     * supplying a destination. In this case, a destination must be provided 
+     * with every send operation. A typical use for this kind of message 
+     * producer is to send replies to requests using the request's CMSReplyTo 
+     * destination.<br>
+     * <br>
+     * A client can specify a default delivery mode, priority, and time to live 
+     * for messages sent by a message producer. It can also specify the 
+     * delivery mode, priority, and time to live for an individual message.<br>
+     * <br>
+     * A client can specify a time-to-live value in milliseconds for each 
+     * message it sends. This value defines a message expiration time that is 
+     * the sum of the message's time-to-live and the GMT when it is sent (for 
+     * transacted sends, this is the time the client sends the message, not the 
+     * time the transaction is committed). 
      */
     class CMS_API MessageProducer : public Closeable
     {
@@ -42,7 +59,9 @@
          * Sends the message to the default producer destination, but does
          * not take ownership of the message, caller must still destroy it.
          * Uses default values for deliveryMode, priority, and time to live.
-         * @param message - a Message Object Pointer
+         * 
+         * @param message
+         *      The message to be sent.
          * @throws CMSException
          */
         virtual void send( Message* message ) throw ( CMSException ) = 0;             
@@ -50,11 +69,15 @@
         /**
          * Sends the message to the default producer destination, but does
          * not take ownership of the message, caller must still destroy it.
-         * @param message - a Message Object Pointer
-         * @param deliverMode The delivery mode to be used.
-         * @param priority The priority for this message.
-         * @param timeToLive The time to live value for this message in
-         * milliseconds.
+         * 
+         * @param message
+         *      The message to be sent.
+         * @param deliveryMode 
+         *      The delivery mode to be used.
+         * @param priority 
+         *      The priority for this message.
+         * @param timeToLive 
+         *      The time to live value for this message in milliseconds.
          * @throws CMSException
          */
         virtual void send( Message* message, int deliveryMode, int priority, 
@@ -64,8 +87,11 @@
          * Sends the message to the designated destination, but does
          * not take ownership of the message, caller must still destroy it.
          * Uses default values for deliveryMode, priority, and time to live.
-         * @param destination - a Message Object Pointer
-         * @param message - the message to send to the destination
+         * 
+         * @param destination
+         *      The destination on which to send the message
+         * @param message
+         *      the message to be sent.
          * @throws CMSException
          */
         virtual void send( const Destination* destination,
@@ -74,12 +100,17 @@
         /**
          * Sends the message to the designated destination, but does
          * not take ownership of the message, caller must still destroy it.
-         * @param destination - a Message Object Pointer
-         * @param message - a Message Object Pointer
-         * @param deliverMode The delivery mode to be used.
-         * @param priority The priority for this message.
-         * @param timeToLive The time to live value for this message in
-         * milliseconds.
+         * 
+         * @param destination
+         *      The destination on which to send the message
+         * @param message
+         *      The message to be sent.
+         * @param deliveryMode
+         *      The delivery mode to be used.
+         * @param priority 
+         *      The priority for this message.
+         * @param timeToLive 
+         *      The time to live value for this message in milliseconds.
          * @throws CMSException
          */     
         virtual void send( const Destination* destination,
@@ -88,24 +119,30 @@
             
         /** 
          * Sets the delivery mode for this Producer
-         * @param mode - The DeliveryMode
+         * 
+         * @param mode
+         *      The DeliveryMode
          */
         virtual void setDeliveryMode( int mode ) = 0;
       
         /** 
          * Gets the delivery mode for this Producer
+         * 
          * @return The DeliveryMode
          */
         virtual int getDeliveryMode() const = 0;
       
         /**
          * Sets if Message Ids are disbled for this Producer
-         * @param value - boolean indicating enable / disable (true / false)
+         * 
+         * @param value
+         *      boolean indicating enable / disable (true / false)
          */
         virtual void setDisableMessageID( bool value ) = 0;
       
         /**
          * Gets if Message Ids are disbled for this Producer
+         * 
          * @return boolean indicating enable / disable (true / false)
          */
         virtual bool getDisableMessageID() const = 0;
@@ -118,18 +155,22 @@
       
         /**
          * Gets if Message Time Stamps are disbled for this Producer
+         * 
          * @return boolean indicating enable / disable (true / false)
          */
         virtual bool getDisableMessageTimeStamp() const = 0;
       
         /**
          * Sets the Priority that this Producers sends messages at
-         * @param priority - int value for Priority level
+         * 
+         * @param priority
+         *      int value for Priority level
          */
         virtual void setPriority( int priority ) = 0;
       
         /**
          * Gets the Priority level that this producer sends messages at
+         * 
          * @return int based priority level
          */
         virtual int getPriority() const = 0;
@@ -138,12 +179,15 @@
          * Sets the Time to Live that this Producers sends messages with.  This
          * value will be used if the time to live is not specified via the
          * send method.
-         * @param time - default time to live value in milliseconds
+         * 
+         * @param time
+         *      default time to live value in milliseconds
          */
         virtual void setTimeToLive( long long time ) = 0;
       
         /**
          * Gets the Time to Live that this producer sends messages with
+         * 
          * @return Time to live value in milliseconds
          */
         virtual long long getTimeToLive() const = 0;
diff --git a/src/main/cms/ObjectMessage.h b/src/main/cms/ObjectMessage.h
index b0f5e50..2159ce9 100644
--- a/src/main/cms/ObjectMessage.h
+++ b/src/main/cms/ObjectMessage.h
@@ -23,6 +23,10 @@
 
 namespace cms{
 
+    /**
+     * Place holder for interaction with JMS systems that support Java 
+     * serialized <code>ObjectMessage</code>s.
+     */
     class CMS_API ObjectMessage : public Message
     {
     public:
diff --git a/src/main/cms/Queue.h b/src/main/cms/Queue.h
index 604d546..c71e307 100644
--- a/src/main/cms/Queue.h
+++ b/src/main/cms/Queue.h
@@ -35,6 +35,7 @@
         
         /**
          * Gets the name of this queue.
+         * 
          * @return The queue name.
          */
         virtual std::string getQueueName() const 
diff --git a/src/main/cms/Session.h b/src/main/cms/Session.h
index 883c269..c93a6e1 100644
--- a/src/main/cms/Session.h
+++ b/src/main/cms/Session.h
@@ -34,6 +34,26 @@
 namespace cms
 {
 
+    /**
+     * A Session object is a single-threaded context for producing and consuming 
+     * messages.<br>
+     * <br>
+     * A session serves several purposes:<br>
+     * <br>
+     *  - It is a factory for its message producers and consumers.<br>
+     *  - It supplies provider-optimized message factories.<br>
+     *  - It is a factory for TemporaryTopics and TemporaryQueues.<br>
+     *  - It provides a way to create Queue or Topic objects for those clients 
+     *    that need to dynamically manipulate provider-specific destination 
+     *    names.<br>
+     *  - It supports a single series of transactions that combine work spanning 
+     *    its producers and consumers into atomic units.<br>
+     *  - It defines a serial order for the messages it consumes and the messages 
+     *    it produces.<br>
+     *  - It retains messages it consumes until they have been acknowledged.<br>
+     *  - It serializes execution of message listeners registered with its message 
+     *    consumers.<br>
+     */
     class CMS_API Session : public Closeable
     {
     public:
@@ -80,6 +100,7 @@
         /**
          * Closes this session as well as any active child consumers or
          * producers.
+         * 
          * @throws CMSException
          */
         virtual void close() throw( CMSException ) = 0;
@@ -87,6 +108,7 @@
         /**
          * Commits all messages done in this transaction and releases any 
          * locks currently held.
+         * 
          * @throws CMSException
          */
         virtual void commit() throw ( CMSException ) = 0;
@@ -94,13 +116,16 @@
         /**
          * Rollsback all messages done in this transaction and releases any 
          * locks currently held.
+         * 
          * @throws CMSException
          */
         virtual void rollback() throw ( CMSException ) = 0;
 
         /**
          * Creates a MessageConsumer for the specified destination.
-         * @param the Destination that this consumer receiving messages for.
+         * 
+         * @param destination
+         *      the Destination that this consumer receiving messages for.
          * @return pointer to a new MessageConsumer that is owned by the 
          *         caller ( caller deletes )
          * @throws CMSException
@@ -112,8 +137,11 @@
         /**
          * Creates a MessageConsumer for the specified destination, using a 
          * message selector.
-         * @param the Destination that this consumer receiving messages for.
-         * @param the Message Selector to use
+         * 
+         * @param destination
+         *      the Destination that this consumer receiving messages for.
+         * @param selector
+         *      the Message Selector to use
          * @return pointer to a new MessageConsumer that is owned by the 
          *         caller ( caller deletes )
          * @throws CMSException
@@ -126,11 +154,15 @@
         /**
          * Creates a MessageConsumer for the specified destination, using a 
          * message selector.
-         * @param the Destination that this consumer receiving messages for.
-         * @param the Message Selector to use
-         * @param if true, and the destination is a topic, inhibits the 
-         * delivery of messages published by its own connection. The behavior 
-         * for NoLocal is not specified if the destination is a queue. 
+         * 
+         * @param destination
+         *      the Destination that this consumer receiving messages for.
+         * @param selector
+         *      the Message Selector to use
+         * @param noLocal
+         *      if true, and the destination is a topic, inhibits the 
+         *      delivery of messages published by its own connection. The behavior 
+         *      for NoLocal is not specified if the destination is a queue. 
          * @return pointer to a new MessageConsumer that is owned by the 
          *         caller ( caller deletes )
          * @throws CMSException
@@ -144,9 +176,17 @@
         /**
          * Creates a durable subscriber to the specified topic, using a 
          * message selector
-         * @param the topic to subscribe to
-         * @param name used to identify the subscription
-         * @param only messages matching the selector are received
+         * 
+         * @param destination
+         *      the topic to subscribe to
+         * @param name
+         *      The name used to identify the subscription
+         * @param selector
+         *      the Message Selector to use
+         * @param noLocal
+         *      if true, and the destination is a topic, inhibits the 
+         *      delivery of messages published by its own connection. The behavior 
+         *      for NoLocal is not specified if the destination is a queue. 
          * @return pointer to a new durable MessageConsumer that is owned by 
          *         the caller ( caller deletes )
          * @throws CMSException
@@ -161,7 +201,9 @@
         /**
          * Creates a MessageProducer to send messages to the specified 
          * destination.
-         * @param the Destination to publish on
+         * 
+         * @param destination
+         *      the Destination to send on
          * @return New MessageProducer that is owned by the caller.
          * @throws CMSException
          */
@@ -170,7 +212,9 @@
 
         /**
          * Creates a queue identity given a Queue name.
-         * @param the name of the new Queue
+         * 
+         * @param queueName
+         *      the name of the new Queue
          * @return new Queue pointer that is owned by the caller.
          * @throws CMSException
          */
@@ -179,7 +223,9 @@
 
         /**
          * Creates a topic identity given a Queue name.
-         * @param the name of the new Topic
+         * 
+         * @param topicName
+         *      the name of the new Topic
          * @return new Topic pointer that is owned by the caller.
          * @throws CMSException
          */
@@ -188,6 +234,7 @@
 
         /**
          * Creates a TemporaryQueue object.
+         * 
          * @return new TemporaryQueue pointer that is owned by the caller.
          * @throws CMSException
          */
@@ -196,6 +243,7 @@
 
         /**
          * Creates a TemporaryTopic object.
+         * 
          * @throws CMSException
          */
         virtual TemporaryTopic* createTemporaryTopic()
@@ -203,6 +251,7 @@
 
         /**
          * Creates a new Message
+         * 
          * @throws CMSException
          */
         virtual Message* createMessage() 
@@ -210,6 +259,7 @@
 
         /**
          * Creates a BytesMessage
+         * 
          * @throws CMSException
          */
         virtual BytesMessage* createBytesMessage() 
@@ -217,8 +267,11 @@
 
         /**
          * Creates a BytesMessage and sets the paylod to the passed value
-         * @param an array of bytes to set in the message
-         * @param the size of the bytes array, or number of bytes to use
+         * 
+         * @param bytes
+         *      an array of bytes to set in the message
+         * @param bytesSize
+         *      the size of the bytes array, or number of bytes to use
          * @throws CMSException
          */
         virtual BytesMessage* createBytesMessage(
@@ -228,6 +281,7 @@
 
         /**
          * Creates a new TextMessage
+         * 
          * @throws CMSException
          */
         virtual TextMessage* createTextMessage() 
@@ -235,7 +289,9 @@
 
         /**
          * Creates a new TextMessage and set the text to the value given
-         * @param the initial text for the message
+         * 
+         * @param text
+         *      the initial text for the message
          * @throws CMSException
          */
         virtual TextMessage* createTextMessage( const std::string& text ) 
@@ -243,6 +299,7 @@
 
         /**
          * Creates a new MapMessage
+         * 
          * @throws CMSException
          */
         virtual MapMessage* createMapMessage() 
@@ -250,12 +307,14 @@
 
         /**
          * Returns the acknowledgement mode of the session.
+         * 
          * @return the Sessions Acknowledge Mode
          */
         virtual AcknowledgeMode getAcknowledgeMode() const = 0;
 
         /**
          * Gets if the Sessions is a Transacted Session
+         * 
          * @return transacted true - false.
          */
         virtual bool isTransacted() const = 0;
@@ -270,7 +329,9 @@
          * Subscriber for the subscription, or while a consumed message is 
          * part of a pending transaction or has not been acknowledged in the 
          * session.
-         * @param name the name used to identify this subscription
+         * 
+         * @param name 
+         *      The name used to identify this subscription
          * @throws CMSException
          */
         virtual void unsubscribe( const std::string& name ) 
diff --git a/src/main/cms/TemporaryQueue.h b/src/main/cms/TemporaryQueue.h
index 4862b99..487cce1 100644
--- a/src/main/cms/TemporaryQueue.h
+++ b/src/main/cms/TemporaryQueue.h
@@ -35,6 +35,7 @@
 
         /**
          * Gets the name of this queue.
+         * 
          * @return The queue name.
          */
         virtual std::string getQueueName() const
@@ -42,6 +43,7 @@
 
         /**
          * Destroy's the Temp Destination at the Broker
+         * 
          * @throws CMSException
          */
         virtual void destroy() throw ( CMSException ) = 0;
diff --git a/src/main/cms/TemporaryTopic.h b/src/main/cms/TemporaryTopic.h
index b0633cb..540a07b 100644
--- a/src/main/cms/TemporaryTopic.h
+++ b/src/main/cms/TemporaryTopic.h
@@ -35,6 +35,7 @@
 
         /**
          * Gets the name of this topic.
+         * 
          * @return The topic name.
          */
         virtual std::string getTopicName()
@@ -42,6 +43,7 @@
 
         /**
          * Destroy's the Temp Destination at the Broker
+         * 
          * @throws CMSException
          */
         virtual void destroy() throw ( CMSException ) = 0;
diff --git a/src/main/cms/TextMessage.h b/src/main/cms/TextMessage.h
index add07f8..bd4ef9b 100644
--- a/src/main/cms/TextMessage.h
+++ b/src/main/cms/TextMessage.h
@@ -35,20 +35,25 @@
 
         /**
          * Gets the message character buffer.
+         * 
          * @return The message character buffer.
          */
         virtual std::string getText() const throw( CMSException ) = 0;
 
         /**
          * Sets the message contents, does not take ownership of the passed
-         * char*, but copies it instead.  
-         * @param msg The message buffer.
+         * char*, but copies it instead.
+         * 
+         * @param msg 
+         *      The message buffer.
          */
         virtual void setText( const char* msg ) throw( CMSException ) = 0;
 
         /**
          * Sets the message contents
-         * @param msg The message buffer.
+         * 
+         * @param msg 
+         *      The message buffer.
          */
         virtual void setText( const std::string& msg ) throw( CMSException ) = 0;
 
diff --git a/src/main/cms/Topic.h b/src/main/cms/Topic.h
index 451f7da..d12dd64 100644
--- a/src/main/cms/Topic.h
+++ b/src/main/cms/Topic.h
@@ -35,6 +35,7 @@
         
         /**
          * Gets the name of this topic.
+         * 
          * @return The topic name.
          */
         virtual std::string getTopicName() 
