diff --git a/client/src/main/java/org/apache/asyncweb/client/auth/AuthScope.java b/client/src/main/java/org/apache/asyncweb/client/auth/AuthScope.java
index b174684..a7ea1dd 100644
--- a/client/src/main/java/org/apache/asyncweb/client/auth/AuthScope.java
+++ b/client/src/main/java/org/apache/asyncweb/client/auth/AuthScope.java
@@ -265,7 +265,7 @@
      * @see java.lang.Object#toString()
      */
     public String toString() {
-        StringBuffer buffer = new StringBuffer();
+        StringBuilder buffer = new StringBuilder();
         if (this.scheme != null) {
             buffer.append(this.scheme.toUpperCase());
             buffer.append(' ');
diff --git a/client/src/main/java/org/apache/asyncweb/client/auth/AuthState.java b/client/src/main/java/org/apache/asyncweb/client/auth/AuthState.java
index 6e67b32..6c2b375 100644
--- a/client/src/main/java/org/apache/asyncweb/client/auth/AuthState.java
+++ b/client/src/main/java/org/apache/asyncweb/client/auth/AuthState.java
@@ -155,7 +155,7 @@
     }
 
     public String toString() {
-        StringBuffer buffer = new StringBuffer();
+        StringBuilder buffer = new StringBuilder();
         buffer.append("Auth state: auth requested [");
         buffer.append(this.authRequested);
         buffer.append("]; auth attempted [");
diff --git a/client/src/main/java/org/apache/asyncweb/client/auth/BasicScheme.java b/client/src/main/java/org/apache/asyncweb/client/auth/BasicScheme.java
index 5292469..0a2c67b 100644
--- a/client/src/main/java/org/apache/asyncweb/client/auth/BasicScheme.java
+++ b/client/src/main/java/org/apache/asyncweb/client/auth/BasicScheme.java
@@ -107,7 +107,9 @@
      */
     public String authenticate(Credentials credentials, HttpRequestMessage request) throws AuthenticationException {
 
-        LOG.trace("enter BasicScheme.authenticate(Credentials, HttpMethod)");
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("enter BasicScheme.authenticate(Credentials, HttpMethod)");
+        }
 
         if (request == null) {
             throw new IllegalArgumentException("Request may not be null");
@@ -137,7 +139,9 @@
      */
     public static String authenticate(UsernamePasswordCredentials credentials, String charset) {
 
-        LOG.trace("enter BasicScheme.authenticate(UsernamePasswordCredentials, String)");
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("enter BasicScheme.authenticate(UsernamePasswordCredentials, String)");
+        }
 
         if (credentials == null) {
             throw new IllegalArgumentException("Credentials may not be null");
@@ -145,7 +149,7 @@
         if (charset == null || charset.length() == 0) {
             throw new IllegalArgumentException("charset may not be null or empty");
         }
-        StringBuffer buffer = new StringBuffer();
+        StringBuilder buffer = new StringBuilder();
         buffer.append(credentials.getUserName());
         buffer.append(":");
         buffer.append(credentials.getPassword());
diff --git a/client/src/main/java/org/apache/asyncweb/client/auth/DigestScheme.java b/client/src/main/java/org/apache/asyncweb/client/auth/DigestScheme.java
index a9231c4..5e8372c 100644
--- a/client/src/main/java/org/apache/asyncweb/client/auth/DigestScheme.java
+++ b/client/src/main/java/org/apache/asyncweb/client/auth/DigestScheme.java
@@ -176,7 +176,9 @@
     public String authenticate(Credentials credentials, HttpRequestMessage request)
     throws AuthenticationException {
 
-        LOG.trace("enter DigestScheme.authenticate(Credentials, HttpMethod)");
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("enter DigestScheme.authenticate(Credentials, HttpMethod)");
+        }
 
         UsernamePasswordCredentials usernamepassword = null;
         try {
@@ -187,7 +189,7 @@
                     + credentials.getClass().getName());
         }
         getParameters().put("methodname", request.getRequestMethod());
-        StringBuffer buffer = new StringBuffer(request.getPath());
+        StringBuilder buffer = new StringBuilder(request.getPath());
         String query = request.getUrl().getQuery();
         if (query != null) {
             if (query.indexOf("?") != 0) {
@@ -219,7 +221,9 @@
      */
     private String createDigest(final String uname, final String pwd) throws AuthenticationException {
 
-        LOG.trace("enter DigestScheme.createDigest(String, String, Map)");
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("enter DigestScheme.createDigest(String, String, Map)");
+        }
 
         final String digAlg = "MD5";
 
@@ -257,7 +261,7 @@
         }
 
         // 3.2.2.2: Calculating digest
-        StringBuffer tmp = new StringBuffer(uname.length() + realm.length() + pwd.length() + 2);
+        StringBuilder tmp = new StringBuilder(uname.length() + realm.length() + pwd.length() + 2);
         tmp.append(uname);
         tmp.append(':');
         tmp.append(realm);
@@ -272,7 +276,7 @@
             //      ":" unq(cnonce-value)
 
             String tmp2=encode(md5Helper.digest(EncodingUtil.getBytes(a1, charset)));
-            StringBuffer tmp3 = new StringBuffer(tmp2.length() + nonce.length() + cnonce.length() + 2);
+            StringBuilder tmp3 = new StringBuilder(tmp2.length() + nonce.length() + cnonce.length() + 2);
             tmp3.append(tmp2);
             tmp3.append(':');
             tmp3.append(nonce);
@@ -297,8 +301,10 @@
         // 3.2.2.1
         String serverDigestValue;
         if (qopVariant == QOP_MISSING) {
-            LOG.debug("Using null qop method");
-            StringBuffer tmp2 = new StringBuffer(md5a1.length() + nonce.length() + md5a2.length());
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Using null qop method");
+            }
+            StringBuilder tmp2 = new StringBuilder(md5a1.length() + nonce.length() + md5a2.length());
             tmp2.append(md5a1);
             tmp2.append(':');
             tmp2.append(nonce);
@@ -310,7 +316,7 @@
                 LOG.debug("Using qop method " + qop);
             }
             String qopOption = getQopVariantString();
-            StringBuffer tmp2 = new StringBuffer(md5a1.length() + nonce.length()
+            StringBuilder tmp2 = new StringBuilder(md5a1.length() + nonce.length()
                 + NC.length() + cnonce.length() + qopOption.length() + md5a2.length() + 5);
             tmp2.append(md5a1);
             tmp2.append(':');
@@ -343,8 +349,10 @@
     private String createDigestHeader(final String uname, final String digest)
         throws AuthenticationException {
 
-        LOG.trace("enter DigestScheme.createDigestHeader(String, Map, "
-            + "String)");
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("enter DigestScheme.createDigestHeader(String, Map, "
+                    + "String)");
+        }
 
         String uri = getParameter("uri");
         String realm = getParameter("realm");
@@ -372,7 +380,7 @@
             params.add(new NameValuePair("opaque", opaque));
         }
 
-        StringBuffer buffer = new StringBuffer();
+        StringBuilder buffer = new StringBuilder();
         for (int i = 0; i < params.size(); i++) {
             NameValuePair param = (NameValuePair) params.get(i);
             if (i > 0) {
@@ -404,7 +412,9 @@
      * @return encoded MD5, or <CODE>null</CODE> if encoding failed
      */
     private static String encode(byte[] binaryData) {
-        LOG.trace("enter DigestScheme.encode(byte[])");
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("enter DigestScheme.encode(byte[])");
+        }
 
         if (binaryData.length != 16) {
             return null;
@@ -429,7 +439,9 @@
      * @throws AsyncHttpClientException if MD5 algorithm is not supported.
      */
     public static String createCnonce() {
-        LOG.trace("enter DigestScheme.createCnonce()");
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("enter DigestScheme.createCnonce()");
+        }
 
         String cnonce;
         final String digAlg = "MD5";
diff --git a/client/src/main/java/org/apache/asyncweb/client/auth/NTCredentials.java b/client/src/main/java/org/apache/asyncweb/client/auth/NTCredentials.java
index b8b01d7..b7adb02 100644
--- a/client/src/main/java/org/apache/asyncweb/client/auth/NTCredentials.java
+++ b/client/src/main/java/org/apache/asyncweb/client/auth/NTCredentials.java
@@ -130,7 +130,7 @@
      * @return A string represenation of this object.
      */
     public String toString() {
-        final StringBuffer sbResult = new StringBuffer(super.toString());
+        final StringBuilder sbResult = new StringBuilder(super.toString());
 
         sbResult.append("@");
         sbResult.append(this.host);
diff --git a/client/src/main/java/org/apache/asyncweb/client/auth/NTLMScheme.java b/client/src/main/java/org/apache/asyncweb/client/auth/NTLMScheme.java
index eb01020..54721bb 100644
--- a/client/src/main/java/org/apache/asyncweb/client/auth/NTLMScheme.java
+++ b/client/src/main/java/org/apache/asyncweb/client/auth/NTLMScheme.java
@@ -173,7 +173,9 @@
      */
     public String authenticate(Credentials credentials, HttpRequestMessage request)
         throws AuthenticationException {
-        LOG.trace("enter NTLMScheme.authenticate(Credentials, HttpMethod)");
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("enter NTLMScheme.authenticate(Credentials, HttpMethod)");
+        }
 
         if (this.state == UNINITIATED) {
             throw new IllegalStateException("NTLM authentication process has not been initiated");
diff --git a/client/src/main/java/org/apache/asyncweb/client/auth/UsernamePasswordCredentials.java b/client/src/main/java/org/apache/asyncweb/client/auth/UsernamePasswordCredentials.java
index bda810c..585dce0 100644
--- a/client/src/main/java/org/apache/asyncweb/client/auth/UsernamePasswordCredentials.java
+++ b/client/src/main/java/org/apache/asyncweb/client/auth/UsernamePasswordCredentials.java
@@ -144,7 +144,7 @@
      * @return the username:password formed string
      */
     public String toString() {
-        StringBuffer result = new StringBuffer();
+        StringBuilder result = new StringBuilder();
         result.append(this.userName);
         result.append(":");
         result.append((this.password == null) ? "null" : this.password);
diff --git a/client/src/main/java/org/apache/asyncweb/client/codec/HttpDecoder.java b/client/src/main/java/org/apache/asyncweb/client/codec/HttpDecoder.java
index 01209b8..3f4a78b 100644
--- a/client/src/main/java/org/apache/asyncweb/client/codec/HttpDecoder.java
+++ b/client/src/main/java/org/apache/asyncweb/client/codec/HttpDecoder.java
@@ -248,7 +248,9 @@
      * @throws Exception if any exception occurs
      */
     public void decodeHeader(String line, HttpResponseMessage msg) throws Exception {
-        LOG.debug("Processing Header Line: " + line);
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Processing Header Line: " + line);
+        }
         // first, get rid of the CRLF from linear whitespace
         line = folding.matcher(line).replaceAll("$1");
         int pos = line.indexOf(":");
@@ -420,7 +422,9 @@
      * @see Cookie
      */
     public Cookie decodeCookie(String cookieStr, HttpResponseMessage msg) throws Exception {
-        LOG.debug("Processing Cookie Line: " + cookieStr);
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Processing Cookie Line: " + cookieStr);
+        }
         Cookie cookie = null;
 
         String pairs[] = cookieStr.split(";");
diff --git a/client/src/main/java/org/apache/asyncweb/client/util/EncodingUtil.java b/client/src/main/java/org/apache/asyncweb/client/util/EncodingUtil.java
index 7a491a2..f394eb3 100644
--- a/client/src/main/java/org/apache/asyncweb/client/util/EncodingUtil.java
+++ b/client/src/main/java/org/apache/asyncweb/client/util/EncodingUtil.java
@@ -103,7 +103,7 @@
      */
     private static String doFormUrlEncode(NameValuePair[] pairs, String charset)
         throws UnsupportedEncodingException {
-        StringBuffer buf = new StringBuffer();
+        StringBuilder buf = new StringBuilder();
         for (int i = 0; i < pairs.length; i++) {
             URLCodec codec = new URLCodec();
             NameValuePair pair = pairs[i];
diff --git a/client/src/main/java/org/apache/asyncweb/client/util/ParameterFormatter.java b/client/src/main/java/org/apache/asyncweb/client/util/ParameterFormatter.java
index 5dda8ff..8604fa0 100644
--- a/client/src/main/java/org/apache/asyncweb/client/util/ParameterFormatter.java
+++ b/client/src/main/java/org/apache/asyncweb/client/util/ParameterFormatter.java
@@ -150,7 +150,7 @@
      * potentially unsafe special characters
      */
     public static void formatValue(
-            final StringBuffer buffer, final String value, boolean alwaysUseQuotes) {
+            final StringBuilder buffer, final String value, boolean alwaysUseQuotes) {
         if (buffer == null) {
             throw new IllegalArgumentException("String buffer may not be null");
         }
@@ -194,7 +194,7 @@
      * @param buffer output buffer
      * @param param the parameter to be formatted
      */
-    public void format(final StringBuffer buffer, final NameValuePair param) {
+    public void format(final StringBuilder buffer, final NameValuePair param) {
         if (buffer == null) {
             throw new IllegalArgumentException("String buffer may not be null");
         }
@@ -219,7 +219,7 @@
      * attribute/value pair
      */
     public String format(final NameValuePair param) {
-        StringBuffer buffer = new StringBuffer();
+        StringBuilder buffer = new StringBuilder();
         format(buffer, param);
         return buffer.toString();
     }
