diff --git a/README.txt b/README.txt
index 3f5e897..fe94196 100644
--- a/README.txt
+++ b/README.txt
@@ -697,10 +697,14 @@ token authentication with the default ASCII protocol.
 
 ASCII protocol authentication requires Memcached version 1.5.15 or greater
 started with the -Y flag, and the PECL memcached client. It was originally
-documented in the memcache 1.5.15 release notes:
+documented in the memcached 1.5.15 release notes:
   https://github.com/memcached/memcached/wiki/ReleaseNotes1515
 
-Additional detail can be found in the protocol documentation:
+While it will work with 1.5.15 or greater, it's strongly recommended you
+use memcached 1.6.4 or greater due to the following bug fix:
+  https://github.com/memcached/memcached/wiki/ReleaseNotes164
+
+Additional detail about this feature can be found in the protocol documentation:
   https://github.com/memcached/memcached/blob/master/doc/protocol.txt
 
 All your memcached servers need to be started with the -Y option to specify
@@ -715,6 +719,9 @@ password as follows:
 
   $conf['memcache_ascii_auth'] = 'foo bar';
 
+Enabling ASCII protocol authentication during load testing resulted in ~1.25%
+overhead.
+
 ## Amazon Elasticache
 
 You can use the Drupal Memcache module to talk with Amazon Elasticache, but to
diff --git a/dmemcache.inc b/dmemcache.inc
index d51dff3..c652f67 100644
--- a/dmemcache.inc
+++ b/dmemcache.inc
@@ -12,6 +12,7 @@
 
 define('MEMCACHED_E2BIG', 37);
 define('MEMCACHED_CLIENT_ERROR', 9);
+define('MEMCACHED_SERVER_TIMED_OUT', 47);
 define('DRUPAL_MEMCACHE_ASCII_AUTH_KEY', 'drupal:memcache:ascii:auth:key');
 define('DRUPAL_MEMCACHE_ASCII_AUTH_LIFETIME_KEY', 'drupal:memcache:ascii:auth:lifetime:key');
 
@@ -1338,9 +1339,11 @@ function _dmemcache_write_debug($action, $bin, $key, $rc) {
  */
 function _dmemcache_ensure_ascii_auth($full_key, $mc) {
   static $memcache_ascii_auth = NULL;
+  static $memcache_ascii_auth_token = NULL;
 
   if (!isset($memcache_ascii_auth)) {
     $memcache_ascii_auth = _dmemcache_use_ascii_auth();
+    $memcache_ascii_auth_token = variable_get('memcache_ascii_auth', FALSE);
   }
 
   // Immediately return if there is no memcache authentication.
@@ -1349,11 +1352,23 @@ function _dmemcache_ensure_ascii_auth($full_key, $mc) {
   }
 
   // Login to the server.
-  $rc = $mc->setByKey($full_key, DRUPAL_MEMCACHE_ASCII_AUTH_KEY, $memcache_ascii_auth);
+  $rc = $mc->setByKey($full_key, DRUPAL_MEMCACHE_ASCII_AUTH_KEY, $memcache_ascii_auth_token);
+  if (!$rc && $mc->getResultCode() == MEMCACHED_SERVER_TIMED_OUT) {
+    // Quitting is the only way to recover from this failure.
+    $mc->quit();
+    $rc = $mc->setByKey($full_key, DRUPAL_MEMCACHE_ASCII_AUTH_KEY, $memcache_ascii_auth_token);
+  }
   if (!$rc) {
+    $code = $mc->getResultCode();
+    $message = $mc->getResultMessage();
+    $t = explode(' ', $memcache_authentication_token);
     $s = $mc->getServerByKey($full_key);
-    register_shutdown_function('watchdog', 'memcache', 'Memcache ascii authentication failed to login to server: %server', array(
+
+    register_shutdown_function('watchdog', 'memcache', 'Memcache ascii authentication failed to login with user %user to server: %server; error code: %code with message %message', array(
       '%server' => $s['host'] . ':' . $s['port'],
+      '%user' => $t[0],
+      '%code' => $code,
+      '%message' => $message,
     ), WATCHDOG_ERROR);
 
     return FALSE;
@@ -1538,5 +1553,5 @@ function _dmemcache_use_ascii_auth() {
     }
   }
 
-  return $memcache_ascii_auth;
+  return (bool) $memcache_ascii_auth;
 }
diff --git a/memcache.install b/memcache.install
index d068bc1..13669f2 100644
--- a/memcache.install
+++ b/memcache.install
@@ -8,6 +8,7 @@
 define('MEMCACHE_PECL_RECOMMENDED', '3.0.6');
 define('MEMCACHED_PECL_RECOMMENDED', '2.0.1');
 define('MEMCACHED_ASCII_AUTH_MINIMUM', '1.5.15');
+define('MEMCACHED_ASCII_AUTH_RECOMMENDED', '1.6.4');
 
 /**
  * Implements hook_enable().
@@ -117,13 +118,22 @@ function memcache_requirements($phase) {
       // If ASCII protocol authentication is enabled, perform extra tests.
       if (_dmemcache_use_ascii_auth()) {
         // Verify minimum required memcached version for ASCII protocol authentication is installed.
-        $version = _memcached_ascii_auth_version_valid();
+        $version = _memcached_ascii_auth_version_valid(MEMCACHED_ASCII_AUTH_MINIMUM);
         if ($version !== TRUE) {
           $errors[] = $t('ASCII protocol authentication is enabled but requires memcached v%minimum or greater. One or more memcached instances detected running memcache v%version.' . _memcache_statistics_link(), array(
             '%version' => $version,
             '%minimum' => MEMCACHED_ASCII_AUTH_MINIMUM,
           ));
         }
+        else {
+          $version = _memcached_ascii_auth_version_valid(MEMCACHED_ASCII_AUTH_RECOMMENDED);
+          if ($version !== TRUE) {
+            $warnings[] = $t('Memcached v%recommended is recommended when using ASCII protocol authentication, to avoid a CPU race. One or more memcached instances detected are running memcache v%version.' . _memcache_statistics_link(), array(
+              '%version' => $version,
+              '%minimum' => MEMCACHED_ASCII_AUTH_RECOMMENDED,
+            ));
+          }
+        }
 
         // Confirm ASCII authentication works on all memcached servers.
         $memcache_bins = variable_get('memcache_bins', array('cache' => 'default'));
@@ -143,11 +153,8 @@ function memcache_requirements($phase) {
             }
           }
         }
-
-
       }
 
-
       // Make a test connection to all configured memcache servers.
       $memcache_servers = variable_get('memcache_servers', array('127.0.0.1:11211' => 'default'));
       foreach ($memcache_servers as $server => $bin) {
@@ -241,18 +248,18 @@ function _memcache_pecl_version_valid() {
 
 /**
  * If ASCII protocol authentication is enabled, validate whether the current memcached
- * version meets the minimum requirements.
+ * version meets the minimum and/or recommended requirements.
  */
-function _memcached_ascii_auth_version_valid() {
+function _memcached_ascii_auth_version_valid($version) {
   if (_dmemcache_use_ascii_auth()) {
     $stats = dmemcache_stats();
     foreach ($stats as $bin => $servers) {
       if (!empty($servers)) {
         foreach ($servers as $server => $value) {
-          $version = $value['version'];
-          if (version_compare($version, MEMCACHED_ASCII_AUTH_MINIMUM, '<')) {
-            // Return detected unsupported version of memcached.
-            return $version;
+          $installed_version = $value['version'];
+          if (version_compare($installed_version, $version, '<')) {
+            // Return detected invalid version of memcached.
+            return $installed_version;
           }
         }
       }
