diff --git a/src/org/apache/http/impl/conn/SingleClientConnManager.java b/src/org/apache/http/impl/conn/SingleClientConnManager.java
index 7999f3e..d770a35 100644
--- a/src/org/apache/http/impl/conn/SingleClientConnManager.java
+++ b/src/org/apache/http/impl/conn/SingleClientConnManager.java
@@ -31,7 +31,10 @@
 
 package org.apache.http.impl.conn;
 
+import dalvik.system.BlockGuard;
+
 import java.io.IOException;
+import java.net.Socket;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.logging.Log;
@@ -249,6 +252,19 @@
         if (recreate)
             uniquePoolEntry = new PoolEntry();
 
+        // BEGIN android-changed
+        // When using a recycled Socket, we need to re-tag it with any
+        // updated statistics options.
+        try {
+            final Socket socket = uniquePoolEntry.connection.getSocket();
+            if (socket != null) {
+                BlockGuard.tagSocketFd(socket.getFileDescriptor$());
+            }
+        } catch (IOException iox) {
+            log.debug("Problem tagging socket.", iox);
+        }
+        // END android-changed
+
         managedConn = new ConnAdapter(uniquePoolEntry, route);
 
         return managedConn;
@@ -279,6 +295,15 @@
         }
 
         try {
+            // BEGIN android-changed
+            // When recycling a Socket, we un-tag it to avoid collecting
+            // statistics from future users.
+            final Socket socket = uniquePoolEntry.connection.getSocket();
+            if (socket != null) {
+                BlockGuard.untagSocketFd(socket.getFileDescriptor$());
+            }
+            // END android-changed
+
             // make sure that the response has been read completely
             if (sca.isOpen() && (this.alwaysShutDown ||
                                  !sca.isMarkedReusable())
diff --git a/src/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java b/src/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java
index 0781e05..717acf0 100644
--- a/src/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java
+++ b/src/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.java
@@ -30,7 +30,10 @@
 
 package org.apache.http.impl.conn.tsccm;
 
+import dalvik.system.BlockGuard;
+
 import java.io.IOException;
+import java.net.Socket;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.logging.Log;
@@ -173,6 +176,18 @@
                 }
 
                 BasicPoolEntry entry = poolRequest.getPoolEntry(timeout, tunit);
+                // BEGIN android-changed
+                // When using a recycled Socket, we need to re-tag it with any
+                // updated statistics options.
+                try {
+                    final Socket socket = entry.getConnection().getSocket();
+                    if (socket != null) {
+                        BlockGuard.tagSocketFd(socket.getFileDescriptor$());
+                    }
+                } catch (IOException iox) {
+                    log.debug("Problem tagging socket.", iox);
+                }
+                // END android-changed
                 return new BasicPooledConnAdapter(ThreadSafeClientConnManager.this, entry);
             }
             
@@ -196,6 +211,16 @@
         }
 
         try {
+            // BEGIN android-changed
+            // When recycling a Socket, we un-tag it to avoid collecting
+            // statistics from future users.
+            final BasicPoolEntry entry = (BasicPoolEntry) hca.getPoolEntry();
+            final Socket socket = entry.getConnection().getSocket();
+            if (socket != null) {
+                BlockGuard.untagSocketFd(socket.getFileDescriptor$());
+            }
+            // END android-changed
+
             // make sure that the response has been read completely
             if (hca.isOpen() && !hca.isMarkedReusable()) {
                 if (log.isDebugEnabled()) {
