diff --git a/.gitattributes b/.gitattributes
index 1236c4027c5adba3ccbd74cb42f668c20e57bf66..e300efbe93a5c4edc39df9a6dcf3db6cd5045e3d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -147,7 +147,6 @@ testfont binary
 /lib/modules/Protocols.pmod/Bittorrent.pmod/Torrent.pike foreign_ident
 /lib/modules/Protocols.pmod/DNS.pmod foreign_ident
 /lib/modules/Protocols.pmod/HTTP.pmod/Query.pike foreign_ident
-/lib/modules/Protocols.pmod/HTTP.pmod/Session.pike foreign_ident
 /lib/modules/Protocols.pmod/IMAP.pmod/imap_server.pike foreign_ident
 /lib/modules/Protocols.pmod/IMAP.pmod/requests.pmod foreign_ident
 /lib/modules/Protocols.pmod/IRC.pmod/Requests.pmod foreign_ident
diff --git a/lib/modules/Protocols.pmod/HTTP.pmod/Session.pike b/lib/modules/Protocols.pmod/HTTP.pmod/Session.pike
index 97a5510e5a66e9f574619aa25d09c8b7166c767f..13952aa6505bd53a20032dcc7fbff98542a3d5df 100644
--- a/lib/modules/Protocols.pmod/HTTP.pmod/Session.pike
+++ b/lib/modules/Protocols.pmod/HTTP.pmod/Session.pike
@@ -1,6 +1,6 @@
 #pike __REAL_VERSION__
 
-// $Id: Session.pike,v 1.14 2004/01/11 00:49:02 nilsson Exp $
+// $Id$
 
 import Protocols.HTTP;
 
@@ -601,6 +601,7 @@ int maximum_connection_reuse=1000000;
 
 // internal (but readable for debug purposes)
 mapping(string:array(KeptConnection)) connection_cache=([]);
+Thread.Mutex connection_cache_mux = Thread.Mutex();
 int connections_kept_n=0;
 int connections_inuse_n=0;
 mapping(string:int) connections_host_n=([]);
@@ -612,6 +613,7 @@ static class KeptConnection
 
    void create(string _lookup,Query _q)
    {
+      Thread.MutexKey key = connection_cache_mux->lock(2);
       lookup=_lookup;
       q=_q;
 
@@ -623,6 +625,7 @@ static class KeptConnection
 
    void disconnect()
    {
+      Thread.MutexKey key = connection_cache_mux->lock(2);
       connection_cache[lookup]-=({this});
       if (!sizeof(connection_cache[lookup]))
 	 m_delete(connection_cache,lookup);
@@ -638,6 +641,7 @@ static class KeptConnection
 
    Query use()
    {
+      Thread.MutexKey key = connection_cache_mux->lock(2);
       connection_cache[lookup]-=({this});
       if (!sizeof(connection_cache[lookup]))
 	 m_delete(connection_cache,lookup);
@@ -660,6 +664,8 @@ Query give_me_connection(Standards.URI url)
 {
    Query q;
 
+   Thread.MutexKey key = connection_cache_mux->lock();
+
    if (array(KeptConnection) v =
        connection_cache[connection_lookup(url)])
    {