diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod
index 0b9ca3433a43ae86f89a4c67e495035071971342..fd1071b8501ac2279b9d9670032fb7fe4a52fd1a 100644
--- a/lib/modules/Sql.pmod/pgsql_util.pmod
+++ b/lib/modules/Sql.pmod/pgsql_util.pmod
@@ -93,18 +93,24 @@ private Regexp iregexp(string expr) {
   return Regexp(ret->read());
 }
 
+private Thread.Mutex cachemutex = Thread.Mutex();
 private string cached_pass, cached_salt, cached_SaltedPassword;
 private int cached_iters;
 
 final string get_salted_password(string pass, string salt, int iters) {
-  return cached_pass == pass && cached_salt == salt && cached_iters == iters
-   && cached_SaltedPassword;
+  Thread.MutexKey lock = cachemutex->lock();
+  string ret = cached_pass == pass && cached_salt == salt
+   && cached_iters == iters && cached_SaltedPassword;
+  lock = 0;
+  return ret;
 }
 
 final void set_salted_password(string pass, string salt, int iters,
  string SaltedPassword) {
+  Thread.MutexKey lock = cachemutex->lock();
   cached_pass = pass; cached_salt = salt; cached_iters = iters;
   cached_SaltedPassword = SaltedPassword;
+  lock = 0;
 }
 
 final void closestatement(bufcon|conxsess plugbuffer,string oldprep) {