diff --git a/modules/common/src/flex/messaging/LocalizedException.java b/modules/common/src/flex/messaging/LocalizedException.java
index 4cc80d8..641f7be 100644
--- a/modules/common/src/flex/messaging/LocalizedException.java
+++ b/modules/common/src/flex/messaging/LocalizedException.java
@@ -28,31 +28,30 @@
  * number and an optional message variant that is used to look up a localized error
  * message or details string using a <code>ResourceLoader</code>. These methods also
  * set the number property of the exception instance.
- * <p>
+ *
  * The various overloads optionally support specifying a target locale as well as
  * arguments to substitute into the localized string if it is parameterized.
- * </p><p>
+ *
  * Localized error message and details strings are stored in the flex.messaging.errors
  * resource bundle. Entries must have the following format.
  * <ul>
  *  <li>Error message: {number}[-{variant}]={message}</li>
  *  <li>Error details: {number}[-{variant}]-details={details}</li>
  * </ul>
- * </p>
  *
  * @see ResourceLoader
  */
 public class LocalizedException extends RuntimeException
 {
-    /** @exclude - transient, the resourceLoader for localized strings doesn't need to serialize.  */
+    /** - transient, the resourceLoader for localized strings doesn't need to serialize.  */
     protected transient ResourceLoader resourceLoader;
-    /** @exclude */
+
     protected int number;
-    /** @exclude */
+
     protected String message;
-    /** @exclude */
+
     protected String details;
-    /** @exclude */
+
     protected Throwable rootCause;
 
     /**
diff --git a/modules/common/src/flex/messaging/config/AbstractConfigurationParser.java b/modules/common/src/flex/messaging/config/AbstractConfigurationParser.java
index ce7f92f..297f6fc 100644
--- a/modules/common/src/flex/messaging/config/AbstractConfigurationParser.java
+++ b/modules/common/src/flex/messaging/config/AbstractConfigurationParser.java
@@ -40,8 +40,6 @@
 
 /**
  * Provides a common base for DOM / XPath based ConfigurationParsers.
- *
- *
  */
 public abstract class AbstractConfigurationParser implements ConfigurationParser, ConfigurationConstants, EntityResolver
 {
@@ -60,7 +58,7 @@
 
     /**
      * Parse the configurations in the configuration file.
-     * <p/>
+     *
      * @param path the configuration file path
      * @param fileResolver the ConfigurationFileResolver object
      * @param config the ServicesConfiguration object
@@ -76,7 +74,6 @@
 
     /**
      * Report Tokens.
-     * <p/> 
      **/
     public void reportTokens()
     {
@@ -215,7 +212,7 @@
     /**
      * Recursively processes all child elements for each of the properties in the provided
      * node list.
-     * <p/>
+     *
      * @param properties the NodeList object
      * @param sourceFileName the source file name
      * @return ConfigMap the ConfigMap object
@@ -271,7 +268,7 @@
     
     /**
      * Get the item value by name if the item is present in the current node as attribute or child element. 
-     * <p/>
+     *
      * @param node the current Node object
      * @param name item name
      * @return String the value of item
@@ -288,7 +285,7 @@
     
     /**
      * Check whether the required items are present in the current node as child elements. 
-     * <p/>
+     *
      * @param node the current Node object
      * @param allowed the String array of the allowed items
      **/
@@ -323,7 +320,7 @@
     
     /**
      * Check whether the required items are present in the current node as attributes. 
-     * <p/>
+     *
      * @param node the current Node object
      * @param allowed the String array of the allowed items
      **/
@@ -350,7 +347,7 @@
     
     /**
      * Check whether the allowed items are present in the current node as elements or attributes. 
-     * <p/>
+     *
      * @param node the current Node object
      * @param allowed the String array of the allowed items
      **/
@@ -363,7 +360,7 @@
 
     /**
      * Check whether the required items are present in the current node as elements or attributes. 
-     * <p/>
+     *
      * @param node the current Node object
      * @param required the String array of the required items
      **/
@@ -404,7 +401,7 @@
 
     /**
      * Check whether the required items are present in the current node (Child elements). 
-     * <p/>
+     *
      * @param node the current Node object
      * @param required the String array of the required items
      **/
@@ -431,7 +428,7 @@
 
     /**
      * Check whether there is any unexpected item in the node list object.
-     * <p/>
+     *
      * @param attributes the current NodeList object
      * @param allowed, the String array of allowed items
      * @return Name of the first unexpected item from the list of allowed attributes, or null if all
@@ -545,8 +542,9 @@
      * to prevent external entity injection attacks. 
      * @param publicId the public Id
      * @param systemId the system Id
-     * @throws SAXException, IOException when the parsing process failed with exceptions
      * @return InputSource the InputSource object
+     * @throws SAXException when the parsing process failed with exceptions
+     * @throws IOException when the parsing process failed with exceptions
      */
     public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
     {
diff --git a/modules/common/src/flex/messaging/config/AdapterSettings.java b/modules/common/src/flex/messaging/config/AdapterSettings.java
index 542a093..8dea7ca 100644
--- a/modules/common/src/flex/messaging/config/AdapterSettings.java
+++ b/modules/common/src/flex/messaging/config/AdapterSettings.java
@@ -24,9 +24,6 @@
  * Adapters can also be configured with initialization
  * properties.
  * </p>
- *
- * @see flex.messaging.services.ServiceAdapter
- *
  */
 public class AdapterSettings extends PropertiesSettings
 {
@@ -63,7 +60,6 @@
      * Gets the name of the Java class implementation for this adapter.
      *
      * @return String The name of the adapter implementation.
-     * @see flex.messaging.services.ServiceAdapter
      */
     public String getClassName()
     {
diff --git a/modules/common/src/flex/messaging/config/ClusterSettings.java b/modules/common/src/flex/messaging/config/ClusterSettings.java
index 4b9bbbf..beb64fd 100644
--- a/modules/common/src/flex/messaging/config/ClusterSettings.java
+++ b/modules/common/src/flex/messaging/config/ClusterSettings.java
@@ -130,7 +130,7 @@
      * Sets the name of the cluster implementation class.
      * The default is 'flex.messaging.cluster.JGroupsCluster'.
      *
-     * @param className
+     * @param className name of the cluster implementation class
      *
      */
     public void setImplementationClass(String className)
diff --git a/modules/common/src/flex/messaging/config/ConfigMap.java b/modules/common/src/flex/messaging/config/ConfigMap.java
index 0d79f90..c2bd780 100644
--- a/modules/common/src/flex/messaging/config/ConfigMap.java
+++ b/modules/common/src/flex/messaging/config/ConfigMap.java
@@ -285,7 +285,7 @@
     /**
      * Gets the property with the specified name as a ConfigMap if possible,
      * or returns the default value if the property is undefined.
-     * <p/>
+     *
      * @param name the property name
      * @param defaultValue the default value
      * @return ConfigMap the ConfigMap object of the property
@@ -303,7 +303,7 @@
     /**
      * Gets the property with the specified name as a String if possible,
      * or returns the default value if the property is undefined.
-     * <p/>
+     *
      * @param name the property name
      * @param defaultValue the default value
      * @return String the String value of the property
@@ -349,7 +349,7 @@
     /**
      * Gets the property with the specified name as a boolean if possible,
      * or returns the default value if the property is undefined.
-     * <p/>
+     *
      * @param name the property name
      * @param defaultValue the default value
      * @return boolean the boolean value of the property
@@ -367,7 +367,7 @@
     /**
      * Gets the property with the specified name as an int if possible,
      * or returns the default value if the property is undefined.
-     * <p/>
+     *
      * @param name the property name
      * @param defaultValue the default value
      * @return int the int value of the property
@@ -391,7 +391,7 @@
     /**
      * Gets the property with the specified name as a long if possible,
      * or returns the default value if the property is undefined.
-     * <p/>
+     *
      * @param name the property name
      * @param defaultValue the default value
      * @return long the long value of the property
@@ -415,7 +415,7 @@
     /**
      * Returns a list of qualified property names that have not been accessed
      * by one of the get*() methods.
-     * <p/>
+     *
      * @return List a list of unused properties
      */
     public List findAllUnusedProperties()
diff --git a/modules/common/src/flex/messaging/config/DestinationSettings.java b/modules/common/src/flex/messaging/config/DestinationSettings.java
index d280a30..3cd0e2f 100644
--- a/modules/common/src/flex/messaging/config/DestinationSettings.java
+++ b/modules/common/src/flex/messaging/config/DestinationSettings.java
@@ -29,9 +29,6 @@
  * client messages for this destination and any security constraints that need
  * to be enforced.
  * </p>
- *
- * @see flex.messaging.Destination
- *
  */
 public class DestinationSettings extends PropertiesSettings
 {
diff --git a/modules/common/src/flex/messaging/config/FlexClientSettings.java b/modules/common/src/flex/messaging/config/FlexClientSettings.java
index 92f0ac6..bba7e5a 100644
--- a/modules/common/src/flex/messaging/config/FlexClientSettings.java
+++ b/modules/common/src/flex/messaging/config/FlexClientSettings.java
@@ -100,7 +100,8 @@
     /**
      * Sets the properties for the default <code>FlexClientOutboundQueueProcessor</code>.
      *
-     * @param flexClientOutboundQueueProcessorProperties
+     * @param flexClientOutboundQueueProcessorProperties properties for the default
+     *                                                   <code>FlexClientOutboundQueueProcessor</code>
      */
     public void setFlexClientOutboundQueueProcessorProperties(ConfigMap flexClientOutboundQueueProcessorProperties)
     {
diff --git a/modules/common/src/flex/messaging/log/AbstractTarget.java b/modules/common/src/flex/messaging/log/AbstractTarget.java
index a0888f9..25e7040 100644
--- a/modules/common/src/flex/messaging/log/AbstractTarget.java
+++ b/modules/common/src/flex/messaging/log/AbstractTarget.java
@@ -172,6 +172,8 @@
 
     /**
      * Return the log level for this target.
+     *
+     * @return the log level set for this target.
      */
     public short getLevel()
     {
@@ -180,6 +182,8 @@
 
     /**
      * Return the target's unique ID.
+     *
+     * @return the target's unique ID.
      */
     public String getId()
     {
diff --git a/modules/common/src/flex/messaging/log/Log.java b/modules/common/src/flex/messaging/log/Log.java
index 043a6b1..b19111d 100644
--- a/modules/common/src/flex/messaging/log/Log.java
+++ b/modules/common/src/flex/messaging/log/Log.java
@@ -35,7 +35,6 @@
 public class Log
 {
 
-    /** @exclude **/
     public static final String INVALID_CHARS = "[]~$^&\\/(){}<>+=`!#%?,:;\'\"@";
 
     // Errors
@@ -48,7 +47,6 @@
     private static String prettyPrinterClass = "BasicPrettyPrinter";
 
     private static final HashSet excludedProperties = new HashSet();
-    /** @exclude **/
     public static final String VALUE_SUPRESSED = "** [Value Suppressed] **";
 
     private volatile short targetLevel;
@@ -199,7 +197,9 @@
     }
 
     /**
-     *
+     * @param log base logger.
+     * @param category category to log to.
+     * @return Logger instance for the given category.
      */
     public static Logger getLogger(Log log, String category)
     {
@@ -439,7 +439,8 @@
     }
 
     /**
-     *
+     * @param l string representation of the log level.
+     * @return a short value representing the log level.
      */
     public static short readLevel(String l)
     {
@@ -502,8 +503,9 @@
     }
 
     /**
-     *
      * Returns the PrettyPrinter used by the Log.
+     *
+     * @return the PrettyPrinter used by the Log.
      */
     public static PrettyPrinter getPrettyPrinter()
     {
@@ -523,8 +525,9 @@
     }
 
     /**
-     *
      * Returns the current target level for the Log.
+     *
+     * @return the current target level for the Log.
      */
     public static short getTargetLevel()
     {
diff --git a/modules/common/src/flex/messaging/util/ExceptionUtil.java b/modules/common/src/flex/messaging/util/ExceptionUtil.java
index 7e6151a..595077a 100644
--- a/modules/common/src/flex/messaging/util/ExceptionUtil.java
+++ b/modules/common/src/flex/messaging/util/ExceptionUtil.java
@@ -205,6 +205,10 @@
 
     /**
      * Recursively prints out a stack of wrapped exceptions.
+     *
+     * @param th the Throwable object
+     * @param out the output writer to print to
+     * @param depth the number of levels the stack should be printed
      */
     protected static void printExceptionStack(Throwable th, PrintWriter out, int depth){
         //only print the stack depth if the depth is greater than 0
diff --git a/modules/common/src/flex/messaging/util/FileUtils.java b/modules/common/src/flex/messaging/util/FileUtils.java
index a0ea851..31e8d30 100644
--- a/modules/common/src/flex/messaging/util/FileUtils.java
+++ b/modules/common/src/flex/messaging/util/FileUtils.java
@@ -35,9 +35,9 @@
      * mark (as for UTF-16 the parser will handle the BOM).
      *
      * @param in InputStream containing BOM and must support mark().
-     * @param default_encoding The default character set encoding. null or "" => system default
+     * @param default_encoding The default character set encoding. null or "" =&gt; system default
      * @return The file character set encoding.
-     * @throws IOException
+     * @throws IOException an IOException, if something went wrong.
      */
     public static final String consumeBOM(InputStream in, String default_encoding) throws IOException
     {
diff --git a/modules/common/src/flex/messaging/util/ObjectTrace.java b/modules/common/src/flex/messaging/util/ObjectTrace.java
index a097d94..646d72f 100644
--- a/modules/common/src/flex/messaging/util/ObjectTrace.java
+++ b/modules/common/src/flex/messaging/util/ObjectTrace.java
@@ -155,6 +155,8 @@
     /**
      * Uses the static member, m_indent to create a string of spaces of
      * the appropriate indentation.
+     *
+     * @return the ident string.
      */
     protected String indentString()
     {
diff --git a/modules/core/src/flex/messaging/MessageBroker.java b/modules/core/src/flex/messaging/MessageBroker.java
index c14961e..065b546 100644
--- a/modules/core/src/flex/messaging/MessageBroker.java
+++ b/modules/core/src/flex/messaging/MessageBroker.java
@@ -117,7 +117,7 @@
      */
     public static final String LOG_CATEGORY_STARTUP_SERVICE = LogCategories.STARTUP_SERVICE;
 
-    /** @exclude */
+
     public static final String TYPE = "MessageBroker";
 
     //--------------------------------------------------------------------------
@@ -160,19 +160,19 @@
         this(true, null);
     }
 
-    /** @exclude */
+
     public MessageBroker(boolean enableManagement)
     {
         this(enableManagement, null);
     }
 
-    /** @exclude */
+
     public MessageBroker(boolean enableManagement, String mbid)
     {
         this(enableManagement, mbid, MessageBroker.class.getClassLoader());
     }
 
-    /** @exclude */
+
     public MessageBroker(boolean enableManagement, String mbid, ClassLoader loader)
     {
         super(enableManagement);
@@ -489,25 +489,25 @@
         this.externalPathResolver = externalPathResolver;
     }
 
-    /** @exclude */
+
     public void setInternalPathResolver(InternalPathResolver internalPathResolver)
     {
         this.internalPathResolver = internalPathResolver;
     }
 
-    /** @exclude */
+
     public InputStream resolveExternalPath(String filename) throws IOException
     {
         return externalPathResolver.resolve(filename);
     }
 
-    /** @exclude */
+
     public InputStream resolveInternalPath(String filename) throws IOException
     {
         return internalPathResolver.resolve(filename);
     }
 
-    /** @exclude */
+
     public interface PathResolver
     {
         InputStream resolve(String filename) throws IOException;
@@ -522,7 +522,7 @@
         // No-op.
     }
 
-    /** @exclude */
+
     public ClusterManager getClusterManager()
     {
         return clusterManager;
@@ -1131,19 +1131,19 @@
         return log;
     }
 
-    /** @exclude */
+
     public LogManager getLogManager()
     {
         return logManager;
     }
 
-    /** @exclude */
+
     public LoginManager getLoginManager()
     {
         return loginManager;
     }
 
-    /** @exclude */
+
     public void setLoginManager(LoginManager loginManager)
     {
         if (this.loginManager != null && this.loginManager.isStarted())
@@ -1155,25 +1155,25 @@
             loginManager.start();
     }
 
-    /** @exclude */
+
     public FlexClientManager getFlexClientManager()
     {
         return flexClientManager;
     }
 
-    /** @exclude */
+
     public void setFlexClientManager(FlexClientManager value)
     {
         flexClientManager = value;
     }
 
-    /** @exclude */
+
     public FlexSessionManager getFlexSessionManager()
     {
         return flexSessionManager;
     }
 
-    /** @exclude */
+
     public void setFlexSessionManager(FlexSessionManager value)
     {
         flexSessionManager = value;
@@ -1185,7 +1185,7 @@
         return redeployManager;
     }
 
-    /** @exclude */
+
     public void setRedeployManager(RedeployManager redeployManager)
     {
         if (this.redeployManager != null && this.redeployManager.isStarted())
@@ -1197,13 +1197,13 @@
             redeployManager.start();
     }
 
-    /** @exclude */
+
     public Class<? extends ThrottleManager> getThrottleManagerClass()
     {
         return throttleManagerClass;
     }
 
-    /** @exclude */
+
     public void setThrottleManagerClass(Class<? extends ThrottleManager> throttleManagerClass)
     {
         this.throttleManagerClass = throttleManagerClass;
@@ -1254,19 +1254,19 @@
         return (endpoints != null && endpoints.size() != 0)? new ArrayList<String>(endpoints.keySet()) : null;
     }
 
-    /** @exclude */
+
     public ChannelSettings getChannelSettings(String ref)
     {
         return channelSettings.get(ref);
     }
 
-    /** @exclude */
+
     public Map<String, ChannelSettings> getAllChannelSettings()
     {
         return channelSettings;
     }
 
-    /** @exclude */
+
     public void setChannelSettings(Map<String, ChannelSettings> channelSettings)
     {
         this.channelSettings = channelSettings;
@@ -1361,49 +1361,49 @@
         return getSecuritySettings().getConstraint(ref);
     }
 
-    /** @exclude */
+
     public ServletContext getServletContext()
     {
         return servletContext;
     }
 
-    /** @exclude */
+
     public SecuritySettings getSecuritySettings()
     {
         return securitySettings;
     }
 
-    /** @exclude */
+
     public void setSecuritySettings(SecuritySettings securitySettings)
     {
         this.securitySettings = securitySettings;
     }
 
-    /** @exclude */
+
     public SystemSettings getSystemSettings()
     {
         return systemSettings;
     }
 
-    /** @exclude */
+
     public void setSystemSettings(SystemSettings l)
     {
         systemSettings = l;
     }
 
-    /** @exclude */
+
     public FlexClientSettings getFlexClientSettings()
     {
         return flexClientSettings;
     }
 
-    /** @exclude */
+
     public void setFlexClientSettings(FlexClientSettings value)
     {
         flexClientSettings = value;
     }
 
-    /** @exclude */
+
     public void initThreadLocals()
     {
         // No thread-locals anymore, so no-op.
@@ -1530,7 +1530,7 @@
 
     }
 
-    /** @exclude */
+
     public AsyncMessage routeCommandToService(CommandMessage command, Endpoint endpoint)
     {
         // Make sure command has a messageId
@@ -1999,7 +1999,7 @@
         return LOG_CATEGORY;
     }
 
-    /** @exclude */
+
     public void setServletContext(ServletContext servletContext)
     {
         this.servletContext = servletContext;
diff --git a/modules/core/src/flex/messaging/MessageBrokerServlet.java b/modules/core/src/flex/messaging/MessageBrokerServlet.java
index 79d2bfd..0e8efb0 100644
--- a/modules/core/src/flex/messaging/MessageBrokerServlet.java
+++ b/modules/core/src/flex/messaging/MessageBrokerServlet.java
@@ -433,7 +433,7 @@
         return this.getClass().getClassLoader();
     }
 
-    /** @exclude */
+
     // Call ONLY on servlet startup
     public static void createThreadLocals()
     {
@@ -443,7 +443,7 @@
         TypeMarshallingContext.createThreadLocalObjects();
     }
 
-    /** @exclude */
+
     // Call ONLY on servlet shutdown
     protected static void destroyThreadLocals()
     {
diff --git a/modules/core/src/flex/messaging/MessageDestination.java b/modules/core/src/flex/messaging/MessageDestination.java
index 48ecc59..c7fcb24 100644
--- a/modules/core/src/flex/messaging/MessageDestination.java
+++ b/modules/core/src/flex/messaging/MessageDestination.java
@@ -264,19 +264,19 @@
         return destinationConfig;
     }
 
-    /** @exclude */
+
     public SubscriptionManager getSubscriptionManager()
     {
         return subscriptionManager;
     }
 
-    /** @exclude */
+
     public RemoteSubscriptionManager getRemoteSubscriptionManager()
     {
         return remoteSubscriptionManager;
     }
 
-    /** @exclude */
+
     public ThrottleManager getThrottleManager()
     {
         return throttleManager;
diff --git a/modules/core/src/flex/messaging/client/FlexClient.java b/modules/core/src/flex/messaging/client/FlexClient.java
index 9c6e4fe..e212986 100644
--- a/modules/core/src/flex/messaging/client/FlexClient.java
+++ b/modules/core/src/flex/messaging/client/FlexClient.java
@@ -1874,7 +1874,7 @@
     /**
      * Utility method to throw a not subscribed exception back to the client
      * if they issue a poll request to an endpoint that they haven't subscribed over.
-     * <p/>
+     *
      * This method should not be called when you hold an internal thread lock. It iterates
      * over all the FlexClients in the current session and will not work if two or more 
      * FlexClients in the same session call it simultaneously.
diff --git a/modules/core/src/flex/messaging/cluster/Cluster.java b/modules/core/src/flex/messaging/cluster/Cluster.java
index eab1890..0339c55 100644
--- a/modules/core/src/flex/messaging/cluster/Cluster.java
+++ b/modules/core/src/flex/messaging/cluster/Cluster.java
@@ -227,7 +227,7 @@
     /**
      * Add a local endpoint URL for a local channel. After doing so, broadcast the information to
      * peers so that they will be aware of the URL.
-     * <p/>
+     *
      * @param serviceType the service type of the endpoint
      * @param destName the destination name
      * @param channelId the Channel ID
diff --git a/modules/core/src/flex/messaging/config/MessagingConfiguration.java b/modules/core/src/flex/messaging/config/MessagingConfiguration.java
index 828d7ea..70987a2 100644
--- a/modules/core/src/flex/messaging/config/MessagingConfiguration.java
+++ b/modules/core/src/flex/messaging/config/MessagingConfiguration.java
@@ -81,7 +81,7 @@
     /**
      * Constructor.
      * Construct a MessagingConfiguration object
-     * <p/>
+     *
      */
     public MessagingConfiguration()
     {
@@ -98,7 +98,7 @@
 
     /**
      * Configure the MessageBroker.
-     * <p/>
+     *
      * @param broker current MessageBroker object
      */
     public void configureBroker(MessageBroker broker)
@@ -135,7 +135,7 @@
 
     /**
      * Create a MessageBroker object with the Id.
-     * <p/>
+     *
      * @param id String the MessageBroker Id
      * @param loader the ClassLoader used to load the MessageBroker class
      * @return the created MessageBroker object
@@ -643,7 +643,7 @@
 
     /**
      * Add Shared Server configurations.
-     * <p/>
+     *
      * @param settings the SharedServerSettings object
      **/
     public void addSharedServerSettings(SharedServerSettings settings)
@@ -653,7 +653,7 @@
 
     /**
      * Add the Channel configurations.
-     * <p/>
+     *
      * @param id the ChannelSetting Id
      * @param settings the ChannelSettings
      **/
@@ -664,7 +664,7 @@
 
     /**
      * Get the ChannelSettings by Id.
-     * <p/>
+     *
      * @param id the ChannelSettings Id 
      * @return ChannelSettings the Channel settings
      **/
@@ -684,7 +684,7 @@
 
     /**
      * Add the default Channel by Id.
-     * <p/>
+     *
      * @param id the Channel Id
      **/
     public void addDefaultChannel(String id)
@@ -694,7 +694,7 @@
 
     /**
      * Get the default Channel List.
-     * <p/>
+     *
      * @return List, the list of default Channels
      **/
     public List getDefaultChannels()
@@ -704,7 +704,7 @@
 
     /**
      * Get the Security Configurations.
-     * <p/>
+     *
      * @return SecuritySettings current SecuritySettings
      **/
     public SecuritySettings getSecuritySettings()
@@ -714,7 +714,7 @@
 
     /**
      * Add Service Configurations.
-     * <p/>
+     *
      * @param settings the ServiceSettings object
      **/
     public void addServiceSettings(ServiceSettings settings)
@@ -724,7 +724,7 @@
 
     /**
      * Get ServiceSettings by Id.
-     * <p/>
+     *
      * @param id the ServiceSettings Id
      * @return ServiceSettings the ServiceSettings object
      **/
@@ -741,7 +741,7 @@
 
     /**
      * Get all ServiceSettings.
-     * <p/>
+     *
      * @return List all the service settings
      **/
     public List getAllServiceSettings()
@@ -751,7 +751,7 @@
 
     /**
      * Get LoggingSettings.
-     * <p/>
+     *
      * @return LoggingSettings the LoggingSettings object
      **/
     public LoggingSettings getLoggingSettings()
@@ -761,7 +761,7 @@
 
     /**
      * Set LoggingSettings.
-     * <p/>
+     *
      * @param loggingSettings the LoggingSettings object
      **/
     public void setLoggingSettings(LoggingSettings loggingSettings)
@@ -771,7 +771,7 @@
 
     /**
      * Set SystemSettings.
-     * <p/>
+     *
      * @param ss the SystemSettings object
      **/
     public void setSystemSettings(SystemSettings ss)
@@ -781,7 +781,7 @@
 
     /**
      * Get SystemSettings.
-     * <p/>
+     *
      * @return SystemSettings the LoggingSettings object
      **/
     public SystemSettings getSystemSettings()
@@ -791,7 +791,7 @@
 
     /**
      * Set FlexClientSettings.
-     * <p/>
+     *
      * @param value the FlexClientSettings object
      **/
     public void setFlexClientSettings(FlexClientSettings value)
@@ -801,7 +801,7 @@
 
     /**
      * Get FlexClientSettings.
-     * <p/>
+     *
      * @return FlexClientSettings the FlexClientSettings object
      **/
     public FlexClientSettings getFlexClientSettings()
@@ -811,7 +811,7 @@
 
     /**
      * Add the ClusterSettings.
-     * <p/>   
+     *
      * @param settings the ClusterSettings object
      **/
     public void addClusterSettings(ClusterSettings settings)
@@ -841,7 +841,7 @@
 
     /**
      * Get the ClusterSettings object by Id.
-     * <p/>
+     *
      * @param clusterId the ClusterSettings Id
      * @return ClusterSettings the ClusterSettings object
      **/
@@ -860,7 +860,7 @@
 
     /**
      * Get the default ClusterSettings.
-     * <p/>
+     *
      * @return ClusterSettings the default ClusterSetting object
      **/
     public ClusterSettings getDefaultCluster()
@@ -876,7 +876,7 @@
 
     /**
      * Add FactorySettings by Id.
-     * <p/>
+     *
      * @param id the FactorySettings Id
      * @param settings the FactorySettings object
      **/
@@ -887,7 +887,7 @@
 
     /**
      * Add MessageFilterSettings.
-     * <p/>
+     *
      * @param settings the MessageFilterSettings object
      **/
     public void addMessageFilterSettings(MessageFilterSettings settings)
@@ -897,7 +897,7 @@
 
     /**
      * Add ValidatorSettings.
-     * <p/>
+     *
      * @param settings the ValidatorSettings object
      **/
     public void addValidatorSettings(ValidatorSettings settings)
@@ -915,7 +915,7 @@
 
     /**
      * Report unused properties.
-     * <p/>
+     *
      **/
     public void reportUnusedProperties()
     {
diff --git a/modules/core/src/flex/messaging/endpoints/AbstractEndpoint.java b/modules/core/src/flex/messaging/endpoints/AbstractEndpoint.java
index 7a81ee8..c88e914 100644
--- a/modules/core/src/flex/messaging/endpoints/AbstractEndpoint.java
+++ b/modules/core/src/flex/messaging/endpoints/AbstractEndpoint.java
@@ -502,7 +502,7 @@
      * Sets the ID of the <code>AbstractEndpoint</code>. If the <code>AbstractEndpoint</code>
      * has a <code>MessageBroker</code> assigned, it also updates the ID in the
      * <code>MessageBroker</code>.
-     * <p/>
+     *
      * @param id The endpoint ID.
      */
     @Override
@@ -818,7 +818,7 @@
      * Retrieves a <code>ConfigMap</code> of the endpoint properties the client
      * needs. Subclasses should add additional properties to <code>super.describeDestination</code>,
      * or return <code>null</code> if they must not send their properties to the client.
-     * <p/>
+     *
      * @return ConfigMap The ConfigMap object.
      */
     public ConfigMap describeEndpoint()
@@ -926,7 +926,7 @@
      * Default implementation of the Endpoint <code>service</code> method.
      * Subclasses should call <code>super.service</code> before their custom
      * code.
-     * <p/>
+     *
      * @param req The HttpServletRequest object.
      * @param res The HttpServletResponse object.
      */
@@ -938,7 +938,7 @@
     /**
      * Typically invoked by subclasses, this method transforms decoded message data
      * into the appropriate Message object and routes the Message to the endpoint's broker.
-     * <p/>
+     *
      * @param message The decoded message data.
      * @return Message The transformed message.
      */
diff --git a/modules/core/src/flex/messaging/endpoints/Endpoint.java b/modules/core/src/flex/messaging/endpoints/Endpoint.java
index e16342f..1d9ec42 100644
--- a/modules/core/src/flex/messaging/endpoints/Endpoint.java
+++ b/modules/core/src/flex/messaging/endpoints/Endpoint.java
@@ -95,7 +95,7 @@
      * All endpoints are referenceable by an ID that is unique among
      * all the endpoints registered to a single broker instance. The id
      * is set through this method, usually through parsed configuration.
-     * <p/>
+     *
      * @param id The endpoint ID.
      */
     void setId(String id);
@@ -158,7 +158,7 @@
      * Responds to HTTP-based messages published by a client. Endpoints which
      * do not support access over HTTP should throw an UnsupportedOperationException
      * in the implementation of htis method.
-     * <p/>
+     *
      * @param req The HttpServletRequest object.
      * @param res The HttpServletResponse object.
      */
diff --git a/modules/core/src/flex/messaging/io/amfx/AmfxInput.java b/modules/core/src/flex/messaging/io/amfx/AmfxInput.java
index 9bb7caa..8944049 100644
--- a/modules/core/src/flex/messaging/io/amfx/AmfxInput.java
+++ b/modules/core/src/flex/messaging/io/amfx/AmfxInput.java
@@ -103,7 +103,7 @@
     /**
      * Constructor.
      * Construct an AmfxInput by passing in a <code>SerialziationContext</code> object
-     * <p/>
+     *
      * @param context the <code>SerialziationContext</code> object
      */
     public AmfxInput(SerializationContext context)
@@ -147,7 +147,7 @@
 
     /**
      * Set Debug trace.
-     * <p/>
+     *
      * @param trace current <code>AmfTrace</code> setting
      */
     public void setDebugTrace(AmfTrace trace)
@@ -158,7 +158,7 @@
 
     /**
      * Set Action Message.
-     * <p/>
+     *
      * @param msg current <code>ActionMessage</code>
      */
     public void setActionMessage(ActionMessage msg)
@@ -168,7 +168,7 @@
 
     /**
      * Read object from the AmfxInput object.
-     * <p/>
+     *
      * @return currently return null, not supported
      * @throws IOException when reading the object has the IOException
      */
@@ -181,7 +181,7 @@
     /**
      * Append a string to text.
      * XML Considerations
-     * <p/>
+     *
      * @param s the String to append
      */
     public void text(String s)
@@ -196,7 +196,7 @@
 
     /**
      * Start the amfx process by setting the ActionMessage version.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_amfx(Attributes attributes)
@@ -223,7 +223,7 @@
 
     /**
      * End the Amfx process.
-     * <p/>
+     *
      */
     public void end_amfx()
     {
@@ -231,7 +231,7 @@
 
     /**
      * Start the process of message headers.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_header(Attributes attributes)
@@ -258,7 +258,7 @@
 
     /**
      * End process of message headers.
-     * <p/>
+     *
      */
     public void end_header()
     {
@@ -271,7 +271,7 @@
 
     /**
      * Start process of the message body.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_body(Attributes attributes)
@@ -287,7 +287,7 @@
 
     /**
      * End process of the message body.
-     * <p/>
+     *
      */
     public void end_body()
     {
@@ -305,7 +305,7 @@
 
     /**
      * Start process of the Action Script type Array.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_array(Attributes attributes)
@@ -383,7 +383,7 @@
 
     /**
      * End process of Action Script type Array.
-     * <p/>
+     *
      */
     public void end_array()
     {
@@ -464,7 +464,7 @@
 
     /**
      * Start process of the Action Script type ByteArray.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_bytearray(Attributes attributes)
@@ -474,7 +474,7 @@
 
     /**
      * End process of the Action Script type ByteArray.
-     * <p/>
+     *
      */
     public void end_bytearray()
     {
@@ -494,7 +494,7 @@
 
     /**
      * Start process of the Action Script type Date.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_date(Attributes attributes)
@@ -504,7 +504,7 @@
 
     /**
      * End process of the Action Script type Date.
-     * <p/>
+     *
      */
     public void end_date()
     {
@@ -530,7 +530,7 @@
 
     /**
      * Start process of the Action Script type Double.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_double(Attributes attributes)
@@ -540,7 +540,7 @@
 
     /**
      * End process of the Action Script type Double.
-     * <p/>
+     *
      */
     public void end_double()
     {
@@ -563,7 +563,7 @@
 
     /**
      * Start process of the Action Script type False.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_false(Attributes attributes)
@@ -576,7 +576,7 @@
 
     /**
      * Start process of the Action Script type False.
-     * <p/>
+     *
      */
     public void end_false()
     {
@@ -584,7 +584,7 @@
 
     /**
      * Start process of Item.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_item(Attributes attributes)
@@ -619,7 +619,7 @@
 
     /**
      * End process of Item.
-     * <p/>
+     *
      */
     public void end_item()
     {
@@ -628,7 +628,7 @@
 
     /**
      * Start process of the Action Script type Int.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_int(Attributes attributes)
@@ -638,7 +638,7 @@
 
     /**
      * End process of the Action Script type Int.
-     * <p/>
+     *
      */
     public void end_int()
     {
@@ -661,7 +661,7 @@
 
     /**
      * Start process of the Action Script type NULL.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_null(Attributes attributes)
@@ -674,7 +674,7 @@
 
     /**
      * Start process of the Action Script type NULL.
-     * <p/>
+     *
      */
     public void end_null()
     {
@@ -684,7 +684,7 @@
 
     /**
      * Start process of type Object.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_object(Attributes attributes)
@@ -748,7 +748,7 @@
     // </object>
     /**
      * End process of type Object.
-     * <p/>
+     *
      */
     public void end_object()
     {
@@ -788,7 +788,7 @@
 
     /**
      * Start process of reference.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_ref(Attributes attributes)
@@ -823,7 +823,7 @@
 
     /**
      * End process of reference.
-     * <p/>
+     *
      */
     public void end_ref()
     {
@@ -831,7 +831,7 @@
 
     /**
      * Start process of the Action Script type String.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_string(Attributes attributes)
@@ -874,7 +874,7 @@
 
     /**
      * End process of the Action Script type String.
-     * <p/>
+     *
      */
     public void end_string()
     {
@@ -911,7 +911,7 @@
 
     /**
      * Start process of Traits.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_traits(Attributes attributes)
@@ -978,7 +978,7 @@
 
     /**
      * End process of Traits.
-     * <p/>
+     *
      */
     public void end_traits()
     {
@@ -987,7 +987,7 @@
 
     /**
      * Start process of the Action Script type True.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_true(Attributes attributes)
@@ -1002,7 +1002,7 @@
 
     /**
      * Start process of the Action Script type True.
-     * <p/>
+     *
      */
     public void end_true()
     {
@@ -1010,7 +1010,7 @@
 
     /**
      * Start process of the Action Script type undefined.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_undefined(Attributes attributes)
@@ -1023,7 +1023,7 @@
 
     /**
      * End process of the Action Script type undefined.
-     * <p/>
+     *
      */
     public void end_undefined()
     {
@@ -1031,7 +1031,7 @@
 
     /**
      * Start process of XML.
-     * <p/>
+     *
      * @param attributes current Attributes
      */
     public void start_xml(Attributes attributes)
@@ -1041,7 +1041,7 @@
 
     /**
      * End process of XML.
-     * <p/>
+     *
      */
     public void end_xml()
     {
diff --git a/modules/core/src/flex/messaging/io/amfx/AmfxMessageDeserializer.java b/modules/core/src/flex/messaging/io/amfx/AmfxMessageDeserializer.java
index aec1c57..b5a3c09 100644
--- a/modules/core/src/flex/messaging/io/amfx/AmfxMessageDeserializer.java
+++ b/modules/core/src/flex/messaging/io/amfx/AmfxMessageDeserializer.java
@@ -56,7 +56,7 @@
     /**
      * Constructor.
      * Create a new AmfxMessageDeserializer object
-     * <p/>
+     *
      */
     public AmfxMessageDeserializer()
     {
@@ -66,7 +66,7 @@
      * Establishes the context for reading in data from the given InputStream.
      * A null value can be passed for the trace parameter if a record of the
      * AMFX data should not be made.
-     * <p/>
+     *
      * @param context SerializationContext object
      * @param in InputStream to process
      * @param trace AmfTrace object
@@ -85,7 +85,7 @@
 
     /**
      * Set the SerializationContext.
-     * <p/>
+     *
      * @param context the SerializationContext object
      */
     public void setSerializationContext(SerializationContext context)
@@ -95,7 +95,7 @@
 
     /**
      * Read message from the ActionMessage and ActionContext.
-     * <p/>
+     *
      * @param m current ActionMessage
      * @param context current ActionContext
      * @throws IOException when the read message process failed
@@ -160,7 +160,7 @@
      * 
      * AMFX does not need or use external entities, so disallow external entities
      * to prevent external entity injection attacks. 
-     * <p/>
+     *
      * @param publicId the public Id
      * @param systemId the system Id
      * @return InputSource the InputSource after entity resolution
@@ -189,7 +189,7 @@
 
     /**
      * Start process of an Element.
-     * <p/>
+     *
      * @param uri the URI of the element
      * @param localName the local name of the element
      * @param qName the qualify name of the element
@@ -232,7 +232,7 @@
 
     /**
      * End process of an Element.
-     * <p/>
+     *
      * @param uri the URI of the element
      * @param localName the local name of the element
      * @param qName the qualify name of the element
@@ -274,7 +274,7 @@
 
     /**
      * Process a char array.
-     * <p/>
+     *
      * @param ch the char array
      * @param start the start position in the char array
      * @param length the length of chars to process
@@ -291,7 +291,7 @@
 
     /**
      * Set the DocumentLocator object.
-     * <p/>
+     *
      * @param l the DocumentLocator object
      */
     public void setDocumentLocator(Locator l)
@@ -302,7 +302,7 @@
 
     /**
      * Process Error of a SAXParseException.
-     * <p/>
+     *
      * @param exception SAXParseException
      * @throws SAXException rethrow the SAXException
      */
@@ -313,7 +313,7 @@
 
     /**
      * Process FatalError of a SAXParseException.
-     * <p/>
+     *
      * @param exception SAXParseException
      * @throws SAXException rethrow the SAXException
      */
@@ -326,7 +326,7 @@
 
     /**
      * Process warning of a SAXParseException.
-     * <p/>
+     *
      * @param exception SAXParseException
      * @throws SAXException rethrow the SAXException
      */
diff --git a/modules/core/src/flex/messaging/util/ClassUtil.java b/modules/core/src/flex/messaging/util/ClassUtil.java
index 9d11f64..f93080e 100644
--- a/modules/core/src/flex/messaging/util/ClassUtil.java
+++ b/modules/core/src/flex/messaging/util/ClassUtil.java
@@ -251,7 +251,7 @@
      * Validates the assignment of a value to an index of an Array or List instance
      * against the deserialization validator. If the assignment is not valid,
      * SerializationException is thrown.
-     * <p/>
+     *
      * @param obj The Array or List instance.
      * @param index The index at which the value is being assigned.
      * @param value The value that is assigned to the index.
diff --git a/modules/core/src/flex/messaging/util/SettingsReplaceUtil.java b/modules/core/src/flex/messaging/util/SettingsReplaceUtil.java
index df09a78..5edc4e0 100644
--- a/modules/core/src/flex/messaging/util/SettingsReplaceUtil.java
+++ b/modules/core/src/flex/messaging/util/SettingsReplaceUtil.java
@@ -179,7 +179,7 @@
     /**
      * Replace {server.name} a horribly complicated way.  This is needed to support relative
      * URLs.  I would like for us to rethink this someday and find a better way to do this
-     * <p/>
+     *
      * @param urls the list of urls to replace
      * @param newURLs the set of new urls
      */
diff --git a/modules/proxy/src/flex/messaging/services/http/HTTPConnectionManagerSettings.java b/modules/proxy/src/flex/messaging/services/http/HTTPConnectionManagerSettings.java
index 5e9f524..14c27bf 100755
--- a/modules/proxy/src/flex/messaging/services/http/HTTPConnectionManagerSettings.java
+++ b/modules/proxy/src/flex/messaging/services/http/HTTPConnectionManagerSettings.java
@@ -26,40 +26,40 @@
  */
 public class HTTPConnectionManagerSettings 
 {    
-    /** @exclude */
+
     public static final String COOKIE_POLICY = "cookie-policy";
 
-    /** @exclude */
+
     public static final String CONNECTION_MANAGER = "connection-manager";
     
-    /** @exclude */
+
     public static final String CONNECTION_TIMEOUT = "connection-timeout";
     
-    /** @exclude */
+
     public static final String DEFAULT_MAX_CONNECTIONS_PER_HOST = "default-max-connections-per-host";
     
-    /** @exclude */
+
     public static final String LINGER = "linger";    
     
-    /** @exclude */
+
     public static final String MAX_PER_HOST = "max-per-host";    
     
-    /** @exclude */
+
     public static final String MAX_TOTAL_CONNECTIONS = "max-total-connections";
     
-    /** @exclude */
+
     public static final String RECEIVE_BUFFER_SIZE = "receive-buffer-size";
     
-    /** @exclude */
+
     public static final String SEND_BUFFER_SIZE = "send-buffer-size";
     
-    /** @exclude */
+
     public static final String SOCKET_TIMEOUT = "socket-timeout";
     
-    /** @exclude */
+
     public static final String STALE_CHECKING_ENABLED = "stale-checking-enabled";
     
-    /** @exclude */
+
     public static final String TCP_NO_DELAY = "tcp-no-delay";
 
     /** The default maximum number of connections allowed per host. */
diff --git a/modules/proxy/src/flex/messaging/services/http/HTTPProxyAdapter.java b/modules/proxy/src/flex/messaging/services/http/HTTPProxyAdapter.java
index f5d2907..1d38cb4 100755
--- a/modules/proxy/src/flex/messaging/services/http/HTTPProxyAdapter.java
+++ b/modules/proxy/src/flex/messaging/services/http/HTTPProxyAdapter.java
@@ -130,7 +130,7 @@
 
     /**
      * Initializes the <code>HTTPProxyAdapter</code> with the properties.
-     * <p/>
+     *
      * <pre>
      * &lt;connection-manager&gt;
      *     &lt;cookie-policy&gt;rfc2109&lt;/cookie-policy&gt;
diff --git a/modules/proxy/src/flex/messaging/services/http/HostConfigurationSettings.java b/modules/proxy/src/flex/messaging/services/http/HostConfigurationSettings.java
index 6722cee..7231f72 100755
--- a/modules/proxy/src/flex/messaging/services/http/HostConfigurationSettings.java
+++ b/modules/proxy/src/flex/messaging/services/http/HostConfigurationSettings.java
@@ -27,28 +27,28 @@
  */
 public class HostConfigurationSettings
 {
-    /** @exclude */
+
     public static final String HOST = "host";
     
-    /** @exclude */
+
     public static final String PORT = "port";
     
-    /** @exclude */
+
     public static final String PROTOCOL = "protocol";
     
-    /** @exclude */
+
     public static final String PROTOCOL_FACFORY = "protocol-factory";
     
-    /** @exclude */
+
     public static final String LOCAL_ADDRESS = "local-address";
     
-    /** @exclude */
+
     public static final String MAX_CONNECTIONS = "max-connections";
     
-    /** @exclude */
+
     public static final String PROXY = "proxy";
     
-    /** @exclude */
+
     public static final String VIRTUAL_HOST = "virtual-host";
 
     private String host;    
diff --git a/modules/testsuite/src/test/java/macromedia/qa/metrics/AbstractDatabase.java b/modules/testsuite/src/test/java/macromedia/qa/metrics/AbstractDatabase.java
index a1e9d2a..106350a 100644
--- a/modules/testsuite/src/test/java/macromedia/qa/metrics/AbstractDatabase.java
+++ b/modules/testsuite/src/test/java/macromedia/qa/metrics/AbstractDatabase.java
@@ -122,7 +122,7 @@
 
     /**
      * Creates a <code>PreparedStatement</code> for a SQL INSERT.
-     * <p/>
+     *
      * e.g.
      * <pre>
      * INSERT INTO myTable ( field1, field2 )
@@ -258,13 +258,13 @@
 
     /**
      * Creates a <code>PreparedStatement</code> for a SQL UPDATE.
-     * <p/>
+     *
      * e.g.
      * <pre>
      * UPDATE Job
      *     SET Position = 'Manager'
      *     WHERE Employee_ID = 12345678
-     * <p/>
+     *
      * </pre>
      *
      * @param table   The table name to update
@@ -373,7 +373,7 @@
 
     /**
      * Creates a <code>PreparedStatement</code> for a SQL DELETE.
-     * <p/>
+     *
      * e.g.
      * <pre>
      * DELETE FROM Employee
