diff --git a/library/x509parse.c b/library/x509parse.c
index 49c1705..b27faf9 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -50,6 +50,13 @@
 #include "polarssl/pkcs12.h"
 #endif
 
+#if defined(POLARSSL_MEMORY_C)
+#include "polarssl/memory.h"
+#else
+#define polarssl_malloc     malloc
+#define polarssl_free       free
+#endif
+
 #include <string.h>
 #include <stdlib.h>
 #if defined(_WIN32)
@@ -261,7 +268,7 @@
         
         if( *p != end )
         {
-            use->next = (x509_name *) malloc(
+            use->next = (x509_name *) polarssl_malloc(
                     sizeof( x509_name ) );
 
             if( use->next == NULL )
@@ -280,7 +287,7 @@
     if( *p == end2 )
         return( 0 );
 
-    cur->next = (x509_name *) malloc(
+    cur->next = (x509_name *) polarssl_malloc(
          sizeof( x509_name ) );
 
     if( cur->next == NULL )
@@ -827,7 +834,7 @@
         /* Allocate and assign next pointer */
         if (*p < end)
         {
-            cur->next = (asn1_sequence *) malloc(
+            cur->next = (asn1_sequence *) polarssl_malloc(
                  sizeof( asn1_sequence ) );
 
             if( cur->next == NULL )
@@ -1043,7 +1050,7 @@
 
         if ( *p < end )
         {
-            cur_entry->next = malloc( sizeof( x509_crl_entry ) );
+            cur_entry->next = polarssl_malloc( sizeof( x509_crl_entry ) );
 
             if( cur_entry->next == NULL )
                 return( POLARSSL_ERR_X509_MALLOC_FAILED );
@@ -1083,7 +1090,7 @@
     if( crt == NULL || buf == NULL )
         return( POLARSSL_ERR_X509_INVALID_INPUT );
 
-    p = (unsigned char *) malloc( len = buflen );
+    p = (unsigned char *) polarssl_malloc( len = buflen );
 
     if( p == NULL )
         return( POLARSSL_ERR_X509_MALLOC_FAILED );
@@ -1348,7 +1355,7 @@
      */
     if ( crt->version != 0 && crt->next == NULL)
     {
-        crt->next = (x509_cert *) malloc( sizeof( x509_cert ) );
+        crt->next = (x509_cert *) polarssl_malloc( sizeof( x509_cert ) );
 
         if( crt->next == NULL )
             return( POLARSSL_ERR_X509_MALLOC_FAILED );
@@ -1364,7 +1371,7 @@
             prev->next = NULL;
 
         if( crt != chain )
-            free( crt );
+            polarssl_free( crt );
 
         return( ret );
     }
@@ -1505,7 +1512,7 @@
      */
     if ( crl->version != 0 && crl->next == NULL)
     {
-        crl->next = (x509_crl *) malloc( sizeof( x509_crl ) );
+        crl->next = (x509_crl *) polarssl_malloc( sizeof( x509_crl ) );
 
         if( crl->next == NULL )
         {
@@ -1550,7 +1557,7 @@
         /*
          * nope, copy the raw DER data
          */
-        p = (unsigned char *) malloc( len = buflen );
+        p = (unsigned char *) polarssl_malloc( len = buflen );
 
         if( p == NULL )
             return( POLARSSL_ERR_X509_MALLOC_FAILED );
@@ -1560,7 +1567,7 @@
         buflen = 0;
     }
 #else
-    p = (unsigned char *) malloc( len = buflen );
+    p = (unsigned char *) polarssl_malloc( len = buflen );
 
     if( p == NULL )
         return( POLARSSL_ERR_X509_MALLOC_FAILED );
@@ -1749,7 +1756,7 @@
 
     if( buflen > 0 )
     {
-        crl->next = (x509_crl *) malloc( sizeof( x509_crl ) );
+        crl->next = (x509_crl *) polarssl_malloc( sizeof( x509_crl ) );
 
         if( crl->next == NULL )
         {
@@ -1781,7 +1788,7 @@
     *n = (size_t) ftell( f );
     fseek( f, 0, SEEK_SET );
 
-    if( ( *buf = (unsigned char *) malloc( *n + 1 ) ) == NULL )
+    if( ( *buf = (unsigned char *) polarssl_malloc( *n + 1 ) ) == NULL )
     {
         fclose( f );
         return( POLARSSL_ERR_X509_MALLOC_FAILED );
@@ -1790,7 +1797,7 @@
     if( fread( *buf, 1, *n, f ) != *n )
     {
         fclose( f );
-        free( *buf );
+        polarssl_free( *buf );
         return( POLARSSL_ERR_X509_FILE_IO_ERROR );
     }
 
@@ -1816,7 +1823,7 @@
     ret = x509parse_crt( chain, buf, n );
 
     memset( buf, 0, n + 1 );
-    free( buf );
+    polarssl_free( buf );
 
     return( ret );
 }
@@ -1930,7 +1937,7 @@
     ret = x509parse_crl( chain, buf, n );
 
     memset( buf, 0, n + 1 );
-    free( buf );
+    polarssl_free( buf );
 
     return( ret );
 }
@@ -1954,7 +1961,7 @@
                 (const unsigned char *) pwd, strlen( pwd ) );
 
     memset( buf, 0, n + 1 );
-    free( buf );
+    polarssl_free( buf );
 
     return( ret );
 }
@@ -1974,7 +1981,7 @@
     ret = x509parse_public_key( rsa, buf, n );
 
     memset( buf, 0, n + 1 );
-    free( buf );
+    polarssl_free( buf );
 
     return( ret );
 }
@@ -2546,7 +2553,7 @@
     ret = x509parse_dhm( dhm, buf, n );
 
     memset( buf, 0, n + 1 );
-    free( buf );
+    polarssl_free( buf );
 
     return( ret );
 }
@@ -3381,7 +3388,7 @@
             name_prv = name_cur;
             name_cur = name_cur->next;
             memset( name_prv, 0, sizeof( x509_name ) );
-            free( name_prv );
+            polarssl_free( name_prv );
         }
 
         name_cur = cert_cur->subject.next;
@@ -3390,7 +3397,7 @@
             name_prv = name_cur;
             name_cur = name_cur->next;
             memset( name_prv, 0, sizeof( x509_name ) );
-            free( name_prv );
+            polarssl_free( name_prv );
         }
 
         seq_cur = cert_cur->ext_key_usage.next;
@@ -3399,7 +3406,7 @@
             seq_prv = seq_cur;
             seq_cur = seq_cur->next;
             memset( seq_prv, 0, sizeof( x509_sequence ) );
-            free( seq_prv );
+            polarssl_free( seq_prv );
         }
 
         seq_cur = cert_cur->subject_alt_names.next;
@@ -3408,13 +3415,13 @@
             seq_prv = seq_cur;
             seq_cur = seq_cur->next;
             memset( seq_prv, 0, sizeof( x509_sequence ) );
-            free( seq_prv );
+            polarssl_free( seq_prv );
         }
 
         if( cert_cur->raw.p != NULL )
         {
             memset( cert_cur->raw.p, 0, cert_cur->raw.len );
-            free( cert_cur->raw.p );
+            polarssl_free( cert_cur->raw.p );
         }
 
         cert_cur = cert_cur->next;
@@ -3429,7 +3436,7 @@
 
         memset( cert_prv, 0, sizeof( x509_cert ) );
         if( cert_prv != crt )
-            free( cert_prv );
+            polarssl_free( cert_prv );
     }
     while( cert_cur != NULL );
 }
@@ -3457,7 +3464,7 @@
             name_prv = name_cur;
             name_cur = name_cur->next;
             memset( name_prv, 0, sizeof( x509_name ) );
-            free( name_prv );
+            polarssl_free( name_prv );
         }
 
         entry_cur = crl_cur->entry.next;
@@ -3466,13 +3473,13 @@
             entry_prv = entry_cur;
             entry_cur = entry_cur->next;
             memset( entry_prv, 0, sizeof( x509_crl_entry ) );
-            free( entry_prv );
+            polarssl_free( entry_prv );
         }
 
         if( crl_cur->raw.p != NULL )
         {
             memset( crl_cur->raw.p, 0, crl_cur->raw.len );
-            free( crl_cur->raw.p );
+            polarssl_free( crl_cur->raw.p );
         }
 
         crl_cur = crl_cur->next;
@@ -3487,7 +3494,7 @@
 
         memset( crl_prv, 0, sizeof( x509_crl ) );
         if( crl_prv != crl )
-            free( crl_prv );
+            polarssl_free( crl_prv );
     }
     while( crl_cur != NULL );
 }
