diff --git a/programs/pkey/dh_genprime.c b/programs/pkey/dh_genprime.c
index c2f5b6c..d6ebca0 100644
--- a/programs/pkey/dh_genprime.c
+++ b/programs/pkey/dh_genprime.c
@@ -20,22 +20,22 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#if !defined(POLARSSL_CONFIG_FILE)
+#if !defined(MBEDTLS_CONFIG_FILE)
 #include "mbedtls/config.h"
 #else
-#include POLARSSL_CONFIG_FILE
+#include MBEDTLS_CONFIG_FILE
 #endif
 
-#if defined(POLARSSL_PLATFORM_C)
+#if defined(MBEDTLS_PLATFORM_C)
 #include "mbedtls/platform.h"
 #else
 #include <stdio.h>
-#define polarssl_printf     printf
+#define mbedtls_printf     printf
 #endif
 
-#if defined(POLARSSL_BIGNUM_C) && defined(POLARSSL_ENTROPY_C) && \
-    defined(POLARSSL_FS_IO) && defined(POLARSSL_CTR_DRBG_C) && \
-    defined(POLARSSL_GENPRIME)
+#if defined(MBEDTLS_BIGNUM_C) && defined(MBEDTLS_ENTROPY_C) && \
+    defined(MBEDTLS_FS_IO) && defined(MBEDTLS_CTR_DRBG_C) && \
+    defined(MBEDTLS_GENPRIME)
 #include "mbedtls/bignum.h"
 #include "mbedtls/entropy.h"
 #include "mbedtls/ctr_drbg.h"
@@ -51,121 +51,121 @@
 #define DH_P_SIZE 1024
 #define GENERATOR "4"
 
-#if !defined(POLARSSL_BIGNUM_C) || !defined(POLARSSL_ENTROPY_C) ||   \
-    !defined(POLARSSL_FS_IO) || !defined(POLARSSL_CTR_DRBG_C) ||     \
-    !defined(POLARSSL_GENPRIME)
+#if !defined(MBEDTLS_BIGNUM_C) || !defined(MBEDTLS_ENTROPY_C) ||   \
+    !defined(MBEDTLS_FS_IO) || !defined(MBEDTLS_CTR_DRBG_C) ||     \
+    !defined(MBEDTLS_GENPRIME)
 int main( void )
 {
-    polarssl_printf("POLARSSL_BIGNUM_C and/or POLARSSL_ENTROPY_C and/or "
-           "POLARSSL_FS_IO and/or POLARSSL_CTR_DRBG_C and/or "
-           "POLARSSL_GENPRIME not defined.\n");
+    mbedtls_printf("MBEDTLS_BIGNUM_C and/or MBEDTLS_ENTROPY_C and/or "
+           "MBEDTLS_FS_IO and/or MBEDTLS_CTR_DRBG_C and/or "
+           "MBEDTLS_GENPRIME not defined.\n");
     return( 0 );
 }
 #else
 int main( void )
 {
     int ret = 1;
-    mpi G, P, Q;
-    entropy_context entropy;
-    ctr_drbg_context ctr_drbg;
+    mbedtls_mpi G, P, Q;
+    mbedtls_entropy_context entropy;
+    mbedtls_ctr_drbg_context ctr_drbg;
     const char *pers = "dh_genprime";
     FILE *fout;
 
-    mpi_init( &G ); mpi_init( &P ); mpi_init( &Q );
-    entropy_init( &entropy );
+    mbedtls_mpi_init( &G ); mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q );
+    mbedtls_entropy_init( &entropy );
 
-    if( ( ret = mpi_read_string( &G, 10, GENERATOR ) ) != 0 )
+    if( ( ret = mbedtls_mpi_read_string( &G, 10, GENERATOR ) ) != 0 )
     {
-        polarssl_printf( " failed\n  ! mpi_read_string returned %d\n", ret );
+        mbedtls_printf( " failed\n  ! mbedtls_mpi_read_string returned %d\n", ret );
         goto exit;
     }
 
-    polarssl_printf( "\nWARNING: You should not generate and use your own DHM primes\n" );
-    polarssl_printf( "         unless you are very certain of what you are doing!\n" );
-    polarssl_printf( "         Failing to follow this instruction may result in\n" );
-    polarssl_printf( "         weak security for your connections! Use the\n" );
-    polarssl_printf( "         predefined DHM parameters from dhm.h instead!\n\n" );
-    polarssl_printf( "============================================================\n\n" );
+    mbedtls_printf( "\nWARNING: You should not generate and use your own DHM primes\n" );
+    mbedtls_printf( "         unless you are very certain of what you are doing!\n" );
+    mbedtls_printf( "         Failing to follow this instruction may result in\n" );
+    mbedtls_printf( "         weak security for your connections! Use the\n" );
+    mbedtls_printf( "         predefined DHM parameters from dhm.h instead!\n\n" );
+    mbedtls_printf( "============================================================\n\n" );
 
-    polarssl_printf( "  ! Generating large primes may take minutes!\n" );
+    mbedtls_printf( "  ! Generating large primes may take minutes!\n" );
 
-    polarssl_printf( "\n  . Seeding the random number generator..." );
+    mbedtls_printf( "\n  . Seeding the random number generator..." );
     fflush( stdout );
 
-    if( ( ret = ctr_drbg_init( &ctr_drbg, entropy_func, &entropy,
+    if( ( ret = mbedtls_ctr_drbg_init( &ctr_drbg, mbedtls_entropy_func, &entropy,
                                (const unsigned char *) pers,
                                strlen( pers ) ) ) != 0 )
     {
-        polarssl_printf( " failed\n  ! ctr_drbg_init returned %d\n", ret );
+        mbedtls_printf( " failed\n  ! mbedtls_ctr_drbg_init returned %d\n", ret );
         goto exit;
     }
 
-    polarssl_printf( " ok\n  . Generating the modulus, please wait..." );
+    mbedtls_printf( " ok\n  . Generating the modulus, please wait..." );
     fflush( stdout );
 
     /*
      * This can take a long time...
      */
-    if( ( ret = mpi_gen_prime( &P, DH_P_SIZE, 1,
-                               ctr_drbg_random, &ctr_drbg ) ) != 0 )
+    if( ( ret = mbedtls_mpi_gen_prime( &P, DH_P_SIZE, 1,
+                               mbedtls_ctr_drbg_random, &ctr_drbg ) ) != 0 )
     {
-        polarssl_printf( " failed\n  ! mpi_gen_prime returned %d\n\n", ret );
+        mbedtls_printf( " failed\n  ! mbedtls_mpi_gen_prime returned %d\n\n", ret );
         goto exit;
     }
 
-    polarssl_printf( " ok\n  . Verifying that Q = (P-1)/2 is prime..." );
+    mbedtls_printf( " ok\n  . Verifying that Q = (P-1)/2 is prime..." );
     fflush( stdout );
 
-    if( ( ret = mpi_sub_int( &Q, &P, 1 ) ) != 0 )
+    if( ( ret = mbedtls_mpi_sub_int( &Q, &P, 1 ) ) != 0 )
     {
-        polarssl_printf( " failed\n  ! mpi_sub_int returned %d\n\n", ret );
+        mbedtls_printf( " failed\n  ! mbedtls_mpi_sub_int returned %d\n\n", ret );
         goto exit;
     }
 
-    if( ( ret = mpi_div_int( &Q, NULL, &Q, 2 ) ) != 0 )
+    if( ( ret = mbedtls_mpi_div_int( &Q, NULL, &Q, 2 ) ) != 0 )
     {
-        polarssl_printf( " failed\n  ! mpi_div_int returned %d\n\n", ret );
+        mbedtls_printf( " failed\n  ! mbedtls_mpi_div_int returned %d\n\n", ret );
         goto exit;
     }
 
-    if( ( ret = mpi_is_prime( &Q, ctr_drbg_random, &ctr_drbg ) ) != 0 )
+    if( ( ret = mbedtls_mpi_is_prime( &Q, mbedtls_ctr_drbg_random, &ctr_drbg ) ) != 0 )
     {
-        polarssl_printf( " failed\n  ! mpi_is_prime returned %d\n\n", ret );
+        mbedtls_printf( " failed\n  ! mbedtls_mpi_is_prime returned %d\n\n", ret );
         goto exit;
     }
 
-    polarssl_printf( " ok\n  . Exporting the value in dh_prime.txt..." );
+    mbedtls_printf( " ok\n  . Exporting the value in dh_prime.txt..." );
     fflush( stdout );
 
     if( ( fout = fopen( "dh_prime.txt", "wb+" ) ) == NULL )
     {
         ret = 1;
-        polarssl_printf( " failed\n  ! Could not create dh_prime.txt\n\n" );
+        mbedtls_printf( " failed\n  ! Could not create dh_prime.txt\n\n" );
         goto exit;
     }
 
-    if( ( ret = mpi_write_file( "P = ", &P, 16, fout ) != 0 ) ||
-        ( ret = mpi_write_file( "G = ", &G, 16, fout ) != 0 ) )
+    if( ( ret = mbedtls_mpi_write_file( "P = ", &P, 16, fout ) != 0 ) ||
+        ( ret = mbedtls_mpi_write_file( "G = ", &G, 16, fout ) != 0 ) )
     {
-        polarssl_printf( " failed\n  ! mpi_write_file returned %d\n\n", ret );
+        mbedtls_printf( " failed\n  ! mbedtls_mpi_write_file returned %d\n\n", ret );
         goto exit;
     }
 
-    polarssl_printf( " ok\n\n" );
+    mbedtls_printf( " ok\n\n" );
     fclose( fout );
 
 exit:
 
-    mpi_free( &G ); mpi_free( &P ); mpi_free( &Q );
-    ctr_drbg_free( &ctr_drbg );
-    entropy_free( &entropy );
+    mbedtls_mpi_free( &G ); mbedtls_mpi_free( &P ); mbedtls_mpi_free( &Q );
+    mbedtls_ctr_drbg_free( &ctr_drbg );
+    mbedtls_entropy_free( &entropy );
 
 #if defined(_WIN32)
-    polarssl_printf( "  Press Enter to exit this program.\n" );
+    mbedtls_printf( "  Press Enter to exit this program.\n" );
     fflush( stdout ); getchar();
 #endif
 
     return( ret );
 }
-#endif /* POLARSSL_BIGNUM_C && POLARSSL_ENTROPY_C && POLARSSL_FS_IO &&
-          POLARSSL_CTR_DRBG_C && POLARSSL_GENPRIME */
+#endif /* MBEDTLS_BIGNUM_C && MBEDTLS_ENTROPY_C && MBEDTLS_FS_IO &&
+          MBEDTLS_CTR_DRBG_C && MBEDTLS_GENPRIME */
