diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/AsyncSchemeRegistry.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/AsyncSchemeRegistry.java
index f5a3b74..b5fb1f1 100644
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/AsyncSchemeRegistry.java
+++ b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/AsyncSchemeRegistry.java
@@ -57,7 +57,7 @@
      *
      * @param name      the name of the scheme to look up (in lowercase)
      *
-     * @return  the scheme, never <code>null</code>
+     * @return  the scheme, never {@code null}
      *
      * @throws IllegalStateException
      *          if the scheme with the given name is not registered
@@ -77,7 +77,7 @@
      *
      * @param host      the host for which to obtain the scheme
      *
-     * @return  the scheme for the given host, never <code>null</code>
+     * @return  the scheme for the given host, never {@code null}
      *
      * @throws IllegalStateException
      *          if a scheme with the respective name is not registered
@@ -95,7 +95,7 @@
      * @param name      the name of the scheme to look up (in lowercase)
      *
      * @return  the scheme, or
-     *          <code>null</code> if there is none by this name
+     *          {@code null} if there is none by this name
      */
     public final AsyncScheme get(final String name) {
         if (name == null) {
@@ -116,7 +116,7 @@
      * @param sch       the scheme to register
      *
      * @return  the scheme previously registered with that name, or
-     *          <code>null</code> if none was registered
+     *          {@code null} if none was registered
      */
     public final AsyncScheme register(final AsyncScheme sch) {
         if (sch == null) {
@@ -133,7 +133,7 @@
      * @param name      the name of the scheme to unregister (in lowercase)
      *
      * @return  the unregistered scheme, or
-     *          <code>null</code> if there was none
+     *          {@code null} if there was none
      */
     public final AsyncScheme unregister(final String name) {
         if (name == null) {
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncUserTokenHandler.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncUserTokenHandler.java
index 21e7b7b..940f44b 100644
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncUserTokenHandler.java
+++ b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncUserTokenHandler.java
@@ -51,7 +51,7 @@
  * This implementation will use the user principle of connection based
  * authentication schemes such as NTLM or that of the SSL session with
  * the client authentication turned on. If both are unavailable,
- * <code>null</code> token will be returned.
+ * {@code null} token will be returned.
  *
  * @since 4.0
  */
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java
index 714ae57..742062e 100644
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java
+++ b/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java
@@ -99,12 +99,12 @@
      * while the request is still being executed.
      *
      * @param target    the target host for the request.
-     *                  Implementations may accept <code>null</code>
+     *                  Implementations may accept {@code null}
      *                  if they can still determine a route, for example
      *                  to a default target or by inspecting the request.
      * @param request   the request to execute
      * @param context   the context to use for the execution, or
-     *                  <code>null</code> to use the default context
+     *                  {@code null} to use the default context
      * @param callback future callback.
      * @return future representing pending completion of the operation.
      */
@@ -117,7 +117,7 @@
      * using the default context.
      *
      * @param target    the target host for the request.
-     *                  Implementations may accept <code>null</code>
+     *                  Implementations may accept {@code null}
      *                  if they can still determine a route, for example
      *                  to a default target or by inspecting the request.
      * @param request   the request to execute
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPost.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPost.java
index af39175..f061f9d 100644
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPost.java
+++ b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPost.java
@@ -37,7 +37,7 @@
 
 /**
  * {@link org.apache.http.nio.protocol.HttpAsyncRequestProducer} implementation
- * that generates an HTTP <code>POST</code> request enclosing content of a file.
+ * that generates an HTTP {@code POST} request enclosing content of a file.
  * The request content will be streamed out directly from the underlying file
  * without an intermediate in-memory buffer.
  *
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPut.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPut.java
index 4a0e92a..ae257d7 100644
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPut.java
+++ b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPut.java
@@ -37,7 +37,7 @@
 
 /**
  * {@link org.apache.http.nio.protocol.HttpAsyncRequestProducer} implementation
- * that generates an HTTP <code>PUT</code> request enclosing content of a file.
+ * that generates an HTTP {@code PUT} request enclosing content of a file.
  * The request content will be streamed out directly from the underlying file
  * without an intermediate in-memory buffer.
  *
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/conn/ManagedNHttpClientConnection.java b/httpasyncclient/src/main/java/org/apache/http/nio/conn/ManagedNHttpClientConnection.java
index ab0a905..d25343d 100644
--- a/httpasyncclient/src/main/java/org/apache/http/nio/conn/ManagedNHttpClientConnection.java
+++ b/httpasyncclient/src/main/java/org/apache/http/nio/conn/ManagedNHttpClientConnection.java
@@ -62,7 +62,7 @@
      * Obtains the SSL session of the underlying connection, if any.
      *
      * @return  the underlying SSL session if available,
-     *          <code>null</code> otherwise
+     *          {@code null} otherwise
      */
     SSLSession getSSLSession();
 
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/conn/NHttpClientConnectionManager.java b/httpasyncclient/src/main/java/org/apache/http/nio/conn/NHttpClientConnectionManager.java
index bf6242d..27d1d96 100644
--- a/httpasyncclient/src/main/java/org/apache/http/nio/conn/NHttpClientConnectionManager.java
+++ b/httpasyncclient/src/main/java/org/apache/http/nio/conn/NHttpClientConnectionManager.java
@@ -64,7 +64,7 @@
      * {@link #upgrade(org.apache.http.nio.NHttpClientConnection,
      *   org.apache.http.conn.routing.HttpRoute,
      *   org.apache.http.protocol.HttpContext) upgrade} method to upgrade
-     * the connection after having executed <code>CONNECT</code> method to
+     * the connection after having executed {@code CONNECT} method to
      * all intermediate proxy hops and and finally calling
      * {@link #routeComplete(org.apache.http.nio.NHttpClientConnection,
      *   org.apache.http.conn.routing.HttpRoute,
@@ -72,7 +72,7 @@
      * as fully completed.
      *
      * @param route HTTP route of the requested connection.
-     * @param state expected state of the connection or <code>null</code>
+     * @param state expected state of the connection or {@code null}
      *              if the connection is not expected to carry any state.
      * @param connectTimeout connect timeout.
      * @param connectionRequestTimeout  connection request timeout.
@@ -91,7 +91,7 @@
      * Releases the connection back to the manager making it potentially
      * re-usable by other consumers. Optionally, the maximum period
      * of how long the manager should keep the connection alive can be
-     * defined using <code>validDuration</code> and <code>timeUnit</code>
+     * defined using {@code validDuration} and {@code timeUnit}
      * parameters.
      *
      * @param conn      the managed connection to release.
@@ -121,7 +121,7 @@
 
     /**
      * Upgrades the underlying connection I/O session to TLS/SSL (or another layering
-     * protocol) after having executed <code>CONNECT</code> method to all
+     * protocol) after having executed {@code CONNECT} method to all
      * intermediate proxy hops.
      *
      * @param conn the managed connection to upgrade.
@@ -165,7 +165,7 @@
      * All expired connections will also be closed.
      *
      * @param idletime  the idle time of connections to be closed
-     * @param tunit     the unit for the <code>idletime</code>
+     * @param tunit     the unit for the {@code idletime}
      *
      * @see #closeExpiredConnections()
      */
