diff --git a/ChangeLog b/ChangeLog
index 2d0f388..b6ce26a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@
 	  invoking any CPython APIs and do not release it until after they
 	  are finished invoking all of them (based heavily on on patch
 	  from Dan Williams).
+	* src/ssl/crypto.c: Initialize OpenSSL thread support so that it
+	  is valid to use OpenSSL APIs from more than one thread (based on
+	  patch from Dan Williams).
 	* test/test_crypto.py: Add tests for load_privatekey and
 	  dump_privatekey when a passphrase or a passphrase callback is
 	  supplied.
diff --git a/src/crypto/crypto.c b/src/crypto/crypto.c
index a4adacf..d4fc882 100644
--- a/src/crypto/crypto.c
+++ b/src/crypto/crypto.c
@@ -694,6 +694,73 @@
     { NULL, NULL }
 };
 
+
+#ifdef WITH_THREAD
+
+#include <pythread.h>
+
+/**
+ * This array will store all of the mutexes available to OpenSSL.
+ */
+static PyThread_type_lock *mutex_buf = NULL;
+
+
+/**
+ * Callback function supplied to OpenSSL to acquire or release a lock.
+ *
+ */
+static void locking_function(int mode, int n, const char * file, int line) {
+    if (mode & CRYPTO_LOCK) {
+        PyThread_acquire_lock(mutex_buf[n], WAIT_LOCK);
+    } else {
+        PyThread_release_lock(mutex_buf[n]);
+    }
+}
+
+
+/**
+ * Initialize OpenSSL for use from multiple threads.
+ *
+ * Returns: 0 if initialization fails, 1 otherwise.
+ */
+static int init_openssl_threads(void) {
+    int i;
+
+    mutex_buf = (PyThread_type_lock *)malloc(
+        CRYPTO_num_locks() * sizeof(PyThread_type_lock));
+    if (!mutex_buf) {
+        return 0;
+    }
+    for (i = 0; i < CRYPTO_num_locks(); ++i) {
+        mutex_buf[i] = PyThread_allocate_lock();
+    }
+    CRYPTO_set_id_callback(PyThread_get_thread_ident);
+    CRYPTO_set_locking_callback(locking_function);
+    return 1;
+}
+
+/* /\** */
+/*  * Clean up after OpenSSL thread initialization. */
+/*  *\/ */
+/* static int deinit_openssl_threads() { */
+/*     int i; */
+
+/*     if (!mutex_buf) { */
+/*         return 0; */
+/*     } */
+/*     CRYPTO_set_id_callback(NULL); */
+/*     CRYPTO_set_locking_callback(NULL); */
+/*     for (i = 0; i < CRYPTO_num_locks(); i++) { */
+/*         PyThread_free_lock(mutex_buf[i]); */
+/*     } */
+/*     free(mutex_buf); */
+/*     mutex_buf = NULL; */
+/*     return 1; */
+/* } */
+
+#endif
+
+
 /*
  * Initialize crypto sub module
  *
@@ -739,6 +806,10 @@
     PyModule_AddIntConstant(module, "TYPE_DSA", crypto_TYPE_DSA);
 
     dict = PyModule_GetDict(module);
+#ifdef WITH_THREAD
+    if (!init_openssl_threads())
+        goto error;
+#endif
     if (!init_crypto_x509(dict))
         goto error;
     if (!init_crypto_x509name(dict))
