diff --git a/src/main/java/org/apache/commons/configuration2/AbstractConfiguration.java b/src/main/java/org/apache/commons/configuration2/AbstractConfiguration.java
index b3c4c9d..fb06e73 100644
--- a/src/main/java/org/apache/commons/configuration2/AbstractConfiguration.java
+++ b/src/main/java/org/apache/commons/configuration2/AbstractConfiguration.java
@@ -62,7 +62,7 @@
  * A concrete sub class only needs to provide a generic {@code getProperty()}
  * method.</li>
  * <li>Support for variable interpolation. Property values containing special
- * variable tokens (like <code>${var}</code>) will be replaced by their
+ * variable tokens (like {@code ${var}}) will be replaced by their
  * corresponding values.</li>
  * <li>Optional support for string lists. The values of properties to be added to this
  * configuration are checked whether they contain a list delimiter character. If
@@ -1656,7 +1656,7 @@
      * Returns a configuration with the same content as this configuration, but
      * with all variables replaced by their actual values. This method tries to
      * clone the configuration and then perform interpolation on all properties.
-     * So property values of the form <code>${var}</code> will be resolved as
+     * So property values of the form {@code ${var}} will be resolved as
      * far as possible (if a variable cannot be resolved, it remains unchanged).
      * This operation is useful if the content of a configuration is to be
      * exported or processed by an external component that does not support
diff --git a/src/main/java/org/apache/commons/configuration2/PropertiesConfiguration.java b/src/main/java/org/apache/commons/configuration2/PropertiesConfiguration.java
index 4d8f4b7..1d4599f 100644
--- a/src/main/java/org/apache/commons/configuration2/PropertiesConfiguration.java
+++ b/src/main/java/org/apache/commons/configuration2/PropertiesConfiguration.java
@@ -68,7 +68,7 @@
  *
  * <ul>
  *  <li>
- *   Each property has the syntax <code>key &lt;separator&gt; value</code>. The
+ *   Each property has the syntax {@code key &lt;separator&gt; value}. The
  *   separators accepted are {@code '='}, {@code ':'} and any white
  *   space character. Examples:
  * <pre>
@@ -770,8 +770,8 @@
          * Reads a property line. Returns null if Stream is
          * at EOF. Concatenates lines ending with "\".
          * Skips lines beginning with "#" or "!" and empty lines.
-         * The return value is a property definition (<code>&lt;name&gt;</code>
-         * = <code>&lt;value&gt;</code>)
+         * The return value is a property definition ({@code &lt;name&gt;}
+         * = {@code &lt;value&gt;})
          *
          * @return A string containing a property value or null
          *
diff --git a/src/main/java/org/apache/commons/configuration2/PropertiesConfigurationLayout.java b/src/main/java/org/apache/commons/configuration2/PropertiesConfigurationLayout.java
index 97f1630..3713d7a 100644
--- a/src/main/java/org/apache/commons/configuration2/PropertiesConfigurationLayout.java
+++ b/src/main/java/org/apache/commons/configuration2/PropertiesConfigurationLayout.java
@@ -104,8 +104,8 @@
  * which has multiple values defined in one line using the separator character.</li>
  * <li>The {@code AppVendor} property appears twice. The comment lines
  * are concatenated, so that {@code layout.getComment("AppVendor");} will
- * result in <code>Application vendor&lt;CR&gt;Another vendor</code>, with
- * <code>&lt;CR&gt;</code> meaning the line separator. In addition the
+ * result in {@code Application vendor&lt;CR&gt;Another vendor}, with
+ * {@code &lt;CR&gt;} meaning the line separator. In addition the
  * &quot;single line&quot; flag is set to <b>false</b> for this property. When
  * the file is saved, two property definitions will be written (in series).</li>
  * </ul>
diff --git a/src/main/java/org/apache/commons/configuration2/beanutils/package-info.java b/src/main/java/org/apache/commons/configuration2/beanutils/package-info.java
index e2c2775..565b9fd 100644
--- a/src/main/java/org/apache/commons/configuration2/beanutils/package-info.java
+++ b/src/main/java/org/apache/commons/configuration2/beanutils/package-info.java
@@ -17,8 +17,8 @@
 
 /**
  * <p>
- * In this package a <code>Configuration</code> implementation can be found that
- * implements the <code>DynaBean</code> interface. It allows to access or modify
+ * In this package a {@code Configuration} implementation can be found that
+ * implements the {@code DynaBean} interface. It allows to access or modify
  * a configuration using the classes from the Commons Beanutils package.
  * There are also classes for declaring beans in configuration files, from which
  * then instances can be created.
diff --git a/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java b/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
index 81682eb..387a02a 100644
--- a/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
+++ b/src/main/java/org/apache/commons/configuration2/builder/combined/CombinedConfigurationBuilder.java
@@ -820,7 +820,7 @@
 
     /**
      * Creates the {@code CombinedConfiguration} for the configuration
-     * sources in the <code>&lt;additional&gt;</code> section. This method is
+     * sources in the {@code &lt;additional&gt;} section. This method is
      * called when the builder constructs the final configuration. It creates a
      * new {@code CombinedConfiguration} and initializes some properties
      * from the result configuration.
diff --git a/src/main/java/org/apache/commons/configuration2/convert/package-info.java b/src/main/java/org/apache/commons/configuration2/convert/package-info.java
index c903f9b..6eeda0b 100644
--- a/src/main/java/org/apache/commons/configuration2/convert/package-info.java
+++ b/src/main/java/org/apache/commons/configuration2/convert/package-info.java
@@ -20,7 +20,7 @@
  * This package contains interfaces and classes related to data type conversions.
  * </p>
  * <p>
- * An <code>AbstractConfiguration</code> object is associated with an object
+ * An {@code AbstractConfiguration} object is associated with an object
  * responsible for data type conversions. Each conversion is done by this object.
  * By replacing the default conversion handler by a custom version, client
  * applications can adapt and extend the type conversions available.
diff --git a/src/main/java/org/apache/commons/configuration2/interpol/ConfigurationInterpolator.java b/src/main/java/org/apache/commons/configuration2/interpol/ConfigurationInterpolator.java
index 412dfd8..a32c793 100644
--- a/src/main/java/org/apache/commons/configuration2/interpol/ConfigurationInterpolator.java
+++ b/src/main/java/org/apache/commons/configuration2/interpol/ConfigurationInterpolator.java
@@ -47,7 +47,7 @@
  * <p>
  * The basic idea of this class is that it can maintain a set of primitive
  * {@link Lookup} objects, each of which is identified by a special prefix. The
- * variables to be processed have the form <code>${prefix:name}</code>.
+ * variables to be processed have the form {@code ${prefix:name}}.
  * {@code ConfigurationInterpolator} will extract the prefix and determine,
  * which primitive lookup object is registered for it. Then the name of the
  * variable is passed to this object to obtain the actual value. It is also
diff --git a/src/main/java/org/apache/commons/configuration2/interpol/Lookup.java b/src/main/java/org/apache/commons/configuration2/interpol/Lookup.java
index 62c7375..f07fa56 100644
--- a/src/main/java/org/apache/commons/configuration2/interpol/Lookup.java
+++ b/src/main/java/org/apache/commons/configuration2/interpol/Lookup.java
@@ -24,7 +24,7 @@
  * Objects implementing this interface can be assigned a variable prefix and
  * added to a {@link ConfigurationInterpolator} object. Whenever the
  * {@code ConfigurationInterpolator} encounters a property value referencing a
- * variable, e.g. <code>${prefix:variableName}</code>, it extracts the prefix
+ * variable, e.g. {@code ${prefix:variableName}}, it extracts the prefix
  * and finds the matching {@code Lookup} object. Then this object is asked to
  * resolve the variable name and provide the corresponding value.
  * </p>
diff --git a/src/main/java/org/apache/commons/configuration2/io/FileUtils.java b/src/main/java/org/apache/commons/configuration2/io/FileUtils.java
index bd5b240..170b4b8 100644
--- a/src/main/java/org/apache/commons/configuration2/io/FileUtils.java
+++ b/src/main/java/org/apache/commons/configuration2/io/FileUtils.java
@@ -37,18 +37,18 @@
 
     //-----------------------------------------------------------------------
     /**
-     * Convert from a <code>URL</code> to a <code>File</code>.
+     * Convert from a {@code URL} to a {@code File}.
      * <p>
      * From version 1.1 this method will decode the URL.
-     * Syntax such as <code>file:///my%20docs/file.txt</code> will be
-     * correctly decoded to <code>/my docs/file.txt</code>. Starting with version
+     * Syntax such as {@code file:///my%20docs/file.txt} will be
+     * correctly decoded to {@code /my docs/file.txt}. Starting with version
      * 1.5, this method uses UTF-8 to decode percent-encoded octets to characters.
      * Additionally, malformed percent-encoded octets are handled leniently by
      * passing them through literally.
      *
      * @param url  the file URL to convert, {@code null} returns {@code null}
-     * @return the equivalent <code>File</code> object, or {@code null}
-     *  if the URL's protocol is not <code>file</code>
+     * @return the equivalent {@code File} object, or {@code null}
+     *  if the URL's protocol is not {@code file}
      */
     public static File toFile(final URL url) {
         if (url == null || !"file".equalsIgnoreCase(url.getProtocol())) {
diff --git a/src/main/java/org/apache/commons/configuration2/package-info.java b/src/main/java/org/apache/commons/configuration2/package-info.java
index 23fdf6c..c754050 100644
--- a/src/main/java/org/apache/commons/configuration2/package-info.java
+++ b/src/main/java/org/apache/commons/configuration2/package-info.java
@@ -18,9 +18,9 @@
 /**
  * <p>
  * The Configuration main package. It contains the definition of the
- * <code>Configuration</code> interface and frequently used implementations
- * like <code>PropertiesConfiguration</code> (dealing with <code>.properties</code>
- * files) or <code>XMLConfiguration</code> that can load XML documents.
+ * {@code Configuration} interface and frequently used implementations
+ * like {@code PropertiesConfiguration} (dealing with {@code .properties}
+ * files) or {@code XMLConfiguration} that can load XML documents.
  * </p>
  *
  */
diff --git a/src/main/java/org/apache/commons/configuration2/tree/DefaultExpressionEngine.java b/src/main/java/org/apache/commons/configuration2/tree/DefaultExpressionEngine.java
index 67c15e0..22d0d1e 100644
--- a/src/main/java/org/apache/commons/configuration2/tree/DefaultExpressionEngine.java
+++ b/src/main/java/org/apache/commons/configuration2/tree/DefaultExpressionEngine.java
@@ -38,7 +38,7 @@
  * delimiter, which is by the default a dot (&quot;.&quot;).</li>
  * <li>Navigating from a node to one of its attributes using the attribute node
  * delimiter, which by default follows the XPATH like syntax
- * <code>[@&lt;attributeName&gt;]</code>.</li>
+ * {@code [@&lt;attributeName&gt;]}.</li>
  * <li>If there are multiple child or attribute nodes with the same name, a
  * specific node can be selected using a numerical index. By default indices are
  * written in parenthesis.</li>
diff --git a/src/test/java/org/apache/commons/configuration2/Logging.java b/src/test/java/org/apache/commons/configuration2/Logging.java
index 91ecdc5..889bece 100644
--- a/src/test/java/org/apache/commons/configuration2/Logging.java
+++ b/src/test/java/org/apache/commons/configuration2/Logging.java
@@ -107,9 +107,9 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.TRACE</code>.
-     * When using a log4j version that does not support the <code>TRACE</code>
-     * level, the message will be logged at the <code>DEBUG</code> level.
+     * Logs a message with {@code org.apache.log4j.Priority.TRACE}.
+     * When using a log4j version that does not support the {@code TRACE}
+     * level, the message will be logged at the {@code DEBUG} level.
      *
      * @param message to log
      * @see org.apache.commons.logging.Log#trace(Object)
@@ -122,9 +122,9 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.TRACE</code>.
-     * When using a log4j version that does not support the <code>TRACE</code>
-     * level, the message will be logged at the <code>DEBUG</code> level.
+     * Logs a message with {@code org.apache.log4j.Priority.TRACE}.
+     * When using a log4j version that does not support the {@code TRACE}
+     * level, the message will be logged at the {@code DEBUG} level.
      *
      * @param message to log
      * @param t       log this cause
@@ -138,7 +138,7 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.DEBUG</code>.
+     * Logs a message with {@code org.apache.log4j.Priority.DEBUG}.
      *
      * @param message to log
      * @see org.apache.commons.logging.Log#debug(Object)
@@ -150,7 +150,7 @@
     }
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.DEBUG</code>.
+     * Logs a message with {@code org.apache.log4j.Priority.DEBUG}.
      *
      * @param message to log
      * @param t       log this cause
@@ -164,7 +164,7 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.INFO</code>.
+     * Logs a message with {@code org.apache.log4j.Priority.INFO}.
      *
      * @param message to log
      * @see org.apache.commons.logging.Log#info(Object)
@@ -177,7 +177,7 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.INFO</code>.
+     * Logs a message with {@code org.apache.log4j.Priority.INFO}.
      *
      * @param message to log
      * @param t       log this cause
@@ -191,7 +191,7 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.WARN</code>.
+     * Logs a message with {@code org.apache.log4j.Priority.WARN}.
      *
      * @param message to log
      * @see org.apache.commons.logging.Log#warn(Object)
@@ -204,7 +204,7 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.WARN</code>.
+     * Logs a message with {@code org.apache.log4j.Priority.WARN}.
      *
      * @param message to log
      * @param t       log this cause
@@ -218,7 +218,7 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.ERROR</code>.
+     * Logs a message with {@code org.apache.log4j.Priority.ERROR}.
      *
      * @param message to log
      * @see org.apache.commons.logging.Log#error(Object)
@@ -231,7 +231,7 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.ERROR</code>.
+     * Logs a message with {@code org.apache.log4j.Priority.ERROR}.
      *
      * @param message to log
      * @param t       log this cause
@@ -245,7 +245,7 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.FATAL</code>.
+     * Logs a message with {@code org.apache.log4j.Priority.FATAL}.
      *
      * @param message to log
      * @see org.apache.commons.logging.Log#fatal(Object)
@@ -258,7 +258,7 @@
 
 
     /**
-     * Logs a message with <code>org.apache.log4j.Priority.FATAL</code>.
+     * Logs a message with {@code org.apache.log4j.Priority.FATAL}.
      *
      * @param message to log
      * @param t       log this cause
diff --git a/src/test/java/org/apache/commons/configuration2/TestINIConfiguration.java b/src/test/java/org/apache/commons/configuration2/TestINIConfiguration.java
index 6406455..568e852 100644
--- a/src/test/java/org/apache/commons/configuration2/TestINIConfiguration.java
+++ b/src/test/java/org/apache/commons/configuration2/TestINIConfiguration.java
@@ -1307,7 +1307,7 @@
         volatile boolean error;
 
         /**
-         * Creates a new instance of <code>GlobalSectionTestThread</code> and
+         * Creates a new instance of {@code GlobalSectionTestThread} and
          * initializes it.
          *
          * @param conf the configuration object
diff --git a/src/test/java/org/apache/commons/configuration2/beanutils/TestConfigurationDynaBean.java b/src/test/java/org/apache/commons/configuration2/beanutils/TestConfigurationDynaBean.java
index e459c94..2bd4984 100644
--- a/src/test/java/org/apache/commons/configuration2/beanutils/TestConfigurationDynaBean.java
+++ b/src/test/java/org/apache/commons/configuration2/beanutils/TestConfigurationDynaBean.java
@@ -38,8 +38,8 @@
 import org.junit.Test;
 
 /**
- * <p>Test Case for the <code>ConfigurationDynaBean</code> implementation class.
- * These tests were based on the ones in <code>BasicDynaBeanTestCase</code>
+ * <p>Test Case for the {@code ConfigurationDynaBean} implementation class.
+ * These tests were based on the ones in {@code BasicDynaBeanTestCase}
  * because the two classes provide similar levels of functionality.</p>
  *
  */
@@ -52,7 +52,7 @@
 
     /**
      * The set of property names we expect to have returned when calling
-     * <code>getDynaProperties()</code>.  You should update this list
+     * {@code getDynaProperties()}.  You should update this list
      * when new properties are added to TestBean.
      */
     String[] properties = {
@@ -159,7 +159,7 @@
     }
 
     /**
-     * Positive getDynaProperty on property <code>booleanProperty</code>.
+     * Positive getDynaProperty on property {@code booleanProperty}.
      */
     @Test
     public void testGetDescriptorBoolean()
@@ -168,7 +168,7 @@
     }
 
     /**
-     * Positive getDynaProperty on property <code>doubleProperty</code>.
+     * Positive getDynaProperty on property {@code doubleProperty}.
      */
     @Test
     public void testGetDescriptorDouble()
@@ -177,7 +177,7 @@
     }
 
     /**
-     * Positive getDynaProperty on property <code>floatProperty</code>.
+     * Positive getDynaProperty on property {@code floatProperty}.
      */
     @Test
     public void testGetDescriptorFloat()
@@ -186,7 +186,7 @@
     }
 
     /**
-     * Positive getDynaProperty on property <code>intProperty</code>.
+     * Positive getDynaProperty on property {@code intProperty}.
      */
     @Test
     public void testGetDescriptorInt()
@@ -195,7 +195,7 @@
     }
 
     /**
-     * Positive getDynaProperty on property <code>longProperty</code>.
+     * Positive getDynaProperty on property {@code longProperty}.
      */
     @Test
     public void testGetDescriptorLong()
@@ -204,7 +204,7 @@
     }
 
     /**
-     * Positive getDynaProperty on property <code>booleanSecond</code>
+     * Positive getDynaProperty on property {@code booleanSecond}
      * that uses an "is" method as the getter.
      */
     @Test
@@ -214,7 +214,7 @@
     }
 
     /**
-     * Positive getDynaProperty on property <code>shortProperty</code>.
+     * Positive getDynaProperty on property {@code shortProperty}.
      */
     @Test
     public void testGetDescriptorShort()
@@ -223,7 +223,7 @@
     }
 
     /**
-     * Positive getDynaProperty on property <code>stringProperty</code>.
+     * Positive getDynaProperty on property {@code stringProperty}.
      */
     @Test
     public void testGetDescriptorString()
@@ -233,7 +233,7 @@
 
     /**
      * Positive test for getDynaPropertys().  Each property name
-     * listed in <code>properties</code> should be returned exactly once.
+     * listed in {@code properties} should be returned exactly once.
      */
     @Test
     public void testGetDescriptors()
@@ -442,7 +442,7 @@
     }
 
     /**
-     * Test <code>contains()</code> method for mapped properties.
+     * Test {@code contains()} method for mapped properties.
      */
     @Test
     public void testMappedContains()
@@ -452,7 +452,7 @@
     }
 
     /**
-     * Test <code>remove()</code> method for mapped properties.
+     * Test {@code remove()} method for mapped properties.
      */
     @Test
     public void testMappedRemove()
diff --git a/src/test/java/org/apache/commons/configuration2/builder/TestFileBasedConfigurationBuilder.java b/src/test/java/org/apache/commons/configuration2/builder/TestFileBasedConfigurationBuilder.java
index 46db350..591f7d1 100644
--- a/src/test/java/org/apache/commons/configuration2/builder/TestFileBasedConfigurationBuilder.java
+++ b/src/test/java/org/apache/commons/configuration2/builder/TestFileBasedConfigurationBuilder.java
@@ -534,10 +534,10 @@
 
     /**
      * Tests whether HomeDirectoryLocationStrategy can be properly initialized
-     * and that it shouldn't throw <code>ConfigurationException</code> when
+     * and that it shouldn't throw {@code ConfigurationException} when
      * everything is correctly in place. Without the code fix for
      * <a href="https://issues.apache.org/jira/browse/CONFIGURATION-634">CONFIGURATION-634</a>,
-     * this test will throw <code>ConfigurationException</code>
+     * this test will throw {@code ConfigurationException}
      * @throws IOException              Shouldn't happen
      * @throws ConfigurationException   Shouldn't happen
      */
diff --git a/src/test/java/org/apache/commons/configuration2/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java b/src/test/java/org/apache/commons/configuration2/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java
index 38aac70..b0914ff 100644
--- a/src/test/java/org/apache/commons/configuration2/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java
+++ b/src/test/java/org/apache/commons/configuration2/builder/combined/TestReloadingCombinedConfigurationBuilderFileBased.java
@@ -129,7 +129,7 @@
      *
      * @param f the file to be written or <b>null</b> for creating a new one
      * @param content the content of the file
-     * @return the <code>File</code> object for the test file
+     * @return the {@code File} object for the test file
      * @throws IOException if an error occurs
      */
     private File writeReloadFile(final File f, final String content) throws IOException
diff --git a/src/test/java/org/apache/commons/configuration2/web/TestAppletConfiguration.java b/src/test/java/org/apache/commons/configuration2/web/TestAppletConfiguration.java
index 67d24f0..dfffcdb 100644
--- a/src/test/java/org/apache/commons/configuration2/web/TestAppletConfiguration.java
+++ b/src/test/java/org/apache/commons/configuration2/web/TestAppletConfiguration.java
@@ -42,7 +42,7 @@
     /**
      * Initializes the tests. This implementation checks whether an applet can
      * be used. Some environments, which do not support a GUI, don't allow
-     * creating an <code>Applet</code> instance. If we are in such an
+     * creating an {@code Applet} instance. If we are in such an
      * environment, some tests need to behave differently or be completely
      * dropped.
      */
