diff --git a/library/ecp.c b/library/ecp.c
index 6d8c897..cf57a6b 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -754,9 +754,9 @@
         return( 0 );
 
 #if defined(MBEDTLS_ECP_NORMALIZE_JAC_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp ) )
+    if ( mbedtls_int_ecp_grp_capable( grp ) )
     {
-        return mbedtls_ecp_normalize_jac_alt( grp, pt );
+        return mbedtls_int_ecp_normalize_jac( grp, pt );
     }
 #endif /* MBEDTLS_ECP_NORMALIZE_JAC_ALT */
     mbedtls_mpi_init( &Zi ); mbedtls_mpi_init( &ZZi );
@@ -808,9 +808,9 @@
         return( ecp_normalize_jac( grp, *T ) );
 
 #if defined(MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp ) )
+    if ( mbedtls_int_ecp_grp_capable( grp ) )
     {
-        return mbedtls_ecp_normalize_jac_many_alt(grp, T, t_len);
+        return mbedtls_int_ecp_normalize_jac_many(grp, T, t_len);
     }
 #endif
 
@@ -931,9 +931,9 @@
 #endif
 
 #if defined(MBEDTLS_ECP_DOUBLE_JAC_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp ) )
+    if ( mbedtls_int_ecp_grp_capable( grp ) )
     {
-        return mbedtls_ecp_double_jac_alt( grp, R, P );
+        return mbedtls_int_ecp_double_jac( grp, R, P );
     }
 #endif /* MBEDTLS_ECP_DOUBLE_JAC_ALT */
 
@@ -1029,9 +1029,9 @@
 #endif
 
 #if defined(MBEDTLS_ECP_ADD_MIXED_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp ) )
+    if ( mbedtls_int_ecp_grp_capable( grp ) )
     {
-        return mbedtls_ecp_add_mixed_alt( grp, R, P, Q );
+        return mbedtls_int_ecp_add_mixed( grp, R, P, Q );
     }
 #endif /* MBEDTLS_ECP_ADD_MIXED_ALT */
 
@@ -1116,9 +1116,9 @@
     int count = 0;
 
 #if defined(MBEDTLS_ECP_RANDOMIZE_JAC_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp ) )
+    if ( mbedtls_int_ecp_grp_capable( grp ) )
     {
-        return mbedtls_ecp_randomize_jac_alt( grp, pt, f_rng, p_rng );
+        return mbedtls_int_ecp_randomize_jac( grp, pt, f_rng, p_rng );
     }
 #endif /* MBEDTLS_ECP_RANDOMIZE_JAC_ALT */
 
@@ -1484,9 +1484,9 @@
     int ret;
 
 #if defined(MBEDTLS_ECP_NORMALIZE_MXZ_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp ) )
+    if ( mbedtls_int_ecp_grp_capable( grp ) )
     {
-        return mbedtls_ecp_normalize_mxz_alt( grp, P );
+        return mbedtls_int_ecp_normalize_mxz( grp, P );
     }
 #endif /* MBEDTLS_ECP_NORMALIZE_MXZ_ALT */
 
@@ -1515,9 +1515,9 @@
     int count = 0;
 
 #if defined(MBEDTLS_ECP_RANDOMIZE_MXZ_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp ) )
+    if ( mbedtls_int_ecp_grp_capable( grp ) )
     {
-        return mbedtls_ecp_randomize_mxz_alt( grp, P, f_rng, p_rng );
+        return mbedtls_int_ecp_randomize_mxz( grp, P, f_rng, p_rng );
     }
 #endif /* MBEDTLS_ECP_RANDOMIZE_MXZ_ALT */
 
@@ -1570,9 +1570,9 @@
     mbedtls_mpi A, AA, B, BB, E, C, D, DA, CB;
 
 #if defined(MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp ) )
+    if ( mbedtls_int_ecp_grp_capable( grp ) )
     {
-        return mbedtls_ecp_double_add_mxz_alt( grp, R, S, P, Q, d );
+        return mbedtls_int_ecp_double_add_mxz( grp, R, S, P, Q, d );
     }
 #endif /* MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT */
 
@@ -1686,18 +1686,18 @@
         ( ret = mbedtls_ecp_check_pubkey( grp, P ) ) != 0 )
         return( ret );
 
-#if defined(MBEDTLS_ECP_FUNCTION_ALT) && defined(MBEDTLS_THREADING_C)
+#if defined(MBEDTLS_ECP_FUNCTION_ALT)
+#if defined(MBEDTLS_THREADING_C)
     if( mbedtls_mutex_lock( &mbedtls_threading_cryptohw_asym_mutex ) != 0 )
         return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR );
 
 #endif
-#if defined(MBEDTLS_ECP_INIT_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp )  )
+    if ( mbedtls_int_ecp_grp_capable( grp )  )
     {
-        MBEDTLS_MPI_CHK( mbedtls_ecp_alt_init( grp ) );
+        MBEDTLS_MPI_CHK( mbedtls_int_ecp_init( grp ) );
     }
 
-#endif
+#endif /* MBEDTLS_ECP_FUNCTION_ALT */
 #if defined(ECP_MONTGOMERY)
     if( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY )
         ret = ecp_mul_mxz( grp, R, m, P, f_rng, p_rng );
@@ -1708,22 +1708,20 @@
         ret = ecp_mul_comb( grp, R, m, P, f_rng, p_rng );
 
 #endif
-#if defined(MBEDTLS_ECP_INIT_ALT)
+#if defined(MBEDTLS_ECP_FUNCTION_ALT)
     cleanup:
 
-#endif
-#if defined(MBEDTLS_ECP_DEINIT_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp ) )
+    if ( mbedtls_int_ecp_grp_capable( grp ) )
     {
-        mbedtls_ecp_alt_deinit( grp );
+        mbedtls_int_ecp_deinit( grp );
     }
 
-#endif
-#if defined(MBEDTLS_ECP_FUNCTION_ALT) && defined(MBEDTLS_THREADING_C)
+#if defined(MBEDTLS_THREADING_C)
     if( mbedtls_mutex_unlock( &mbedtls_threading_cryptohw_asym_mutex ) != 0 )
         return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR );
 
 #endif
+#endif /* MBEDTLS_ECP_FUNCTION_ALT */
     return( ret );
 }
 
@@ -1826,35 +1824,35 @@
     MBEDTLS_MPI_CHK( mbedtls_ecp_mul_shortcuts( grp, &mP, m, P ) );
     MBEDTLS_MPI_CHK( mbedtls_ecp_mul_shortcuts( grp, R,   n, Q ) );
 
-#if defined(MBEDTLS_ECP_FUNCTION_ALT) && defined(MBEDTLS_THREADING_C)
+#if defined(MBEDTLS_ECP_FUNCTION_ALT)
+#if defined(MBEDTLS_THREADING_C)
     if( mbedtls_mutex_lock( &mbedtls_threading_cryptohw_asym_mutex ) != 0 )
         return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR );
 
 #endif
-#if defined(MBEDTLS_ECP_INIT_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp )  )
+    if ( mbedtls_int_ecp_grp_capable( grp )  )
     {
-        MBEDTLS_MPI_CHK( mbedtls_ecp_alt_init( grp ) );
+        MBEDTLS_MPI_CHK( mbedtls_int_ecp_init( grp ) );
     }
 
-#endif
+#endif /* MBEDTLS_ECP_FUNCTION_ALT */
     MBEDTLS_MPI_CHK( ecp_add_mixed( grp, R, &mP, R ) );
     MBEDTLS_MPI_CHK( ecp_normalize_jac( grp, R ) );
 
 cleanup:
 
-#if defined(MBEDTLS_ECP_DEINIT_ALT)
-    if ( mbedtls_ecp_alt_grp_capable( grp ) )
+#if defined(MBEDTLS_ECP_FUNCTION_ALT)
+    if ( mbedtls_int_ecp_grp_capable( grp ) )
     {
-        mbedtls_ecp_alt_deinit( grp );
+        mbedtls_int_ecp_deinit( grp );
     }
 
-#endif
-#if defined(MBEDTLS_ECP_FUNCTION_ALT) && defined(MBEDTLS_THREADING_C)
+#if defined(MBEDTLS_THREADING_C)
     if( mbedtls_mutex_unlock( &mbedtls_threading_cryptohw_asym_mutex ) != 0 )
         return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR );
 
 #endif
+#endif /* MBEDTLS_ECP_FUNCTION_ALT */
     mbedtls_ecp_point_free( &mP );
 
     return( ret );
