Apply that strategy to the two other functions
diff --git a/OpenSSL/ssl/context.c b/OpenSSL/ssl/context.c
index 69bc4e5..a0b9a72 100644
--- a/OpenSSL/ssl/context.c
+++ b/OpenSSL/ssl/context.c
@@ -171,7 +171,7 @@
 
     MY_END_ALLOW_THREADS(conn->tstate);
 
-    cert = crypto_X509_New(X509_STORE_CTX_get_current_cert(x509_ctx), 0);
+    cert = new_x509(X509_STORE_CTX_get_current_cert(x509_ctx), 0);
     errnum = X509_STORE_CTX_get_error(x509_ctx);
     errdepth = X509_STORE_CTX_get_error_depth(x509_ctx);
 
@@ -1036,7 +1036,7 @@
     }
     else
     {
-        return (PyObject *)crypto_X509Store_New(store, 0);
+        return (PyObject *)new_x509store(store, 0);
     }
 }
 
diff --git a/OpenSSL/ssl/ssl.c b/OpenSSL/ssl/ssl.c
index efc6310..9e7d6f1 100644
--- a/OpenSSL/ssl/ssl.c
+++ b/OpenSSL/ssl/ssl.c
@@ -81,9 +81,13 @@
         PyOpenSSL_MODRETURN(NULL);
     }
 
+    new_x509 = (crypto_X509NameObj* (*)(X509*, int))GetProcAddress(crypto, "crypto_X509_New");
     new_x509name = (crypto_X509NameObj* (*)(X509_NAME*, int))GetProcAddress(crypto, "crypto_X509Name_New");
+    new_x509store = (crypto_X509NameObj* (*)(X509_STORE*, int))GetProcAddress(crypto, "crypto_X509Store_New");
 #   else
+    new_x509 = crypto_X509_New;
     new_x509name = crypto_X509Name_New;
+    new_x509store = crypto_X509Store_New;
 #   endif
 #endif
 
diff --git a/OpenSSL/ssl/ssl.h b/OpenSSL/ssl/ssl.h
index 15ae959..933f578 100644
--- a/OpenSSL/ssl/ssl.h
+++ b/OpenSSL/ssl/ssl.h
@@ -46,7 +46,9 @@
 extern ssl_Context_New_RETURN    ssl_Context_New    ssl_Context_New_PROTO;
 extern ssl_Connection_New_RETURN ssl_Connection_New ssl_Connection_New_PROTO;
 
+crypto_X509Obj* (*new_x509)(X509*, int);
 crypto_X509NameObj* (*new_x509name)(X509_NAME*, int);
+crypto_X509StoreObj* (*new_x509store)(X509_STORE*, int);
 
 #else /* SSL_MODULE */