diff --git a/library/ecp.c b/library/ecp.c
index cf57a6b..0a989d5 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -754,9 +754,9 @@
         return( 0 );
 
 #if defined(MBEDTLS_ECP_NORMALIZE_JAC_ALT)
-    if ( mbedtls_int_ecp_grp_capable( grp ) )
+    if ( mbedtls_internal_ecp_grp_capable( grp ) )
     {
-        return mbedtls_int_ecp_normalize_jac( grp, pt );
+        return mbedtls_internal_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_int_ecp_grp_capable( grp ) )
+    if ( mbedtls_internal_ecp_grp_capable( grp ) )
     {
-        return mbedtls_int_ecp_normalize_jac_many(grp, T, t_len);
+        return mbedtls_internal_ecp_normalize_jac_many(grp, T, t_len);
     }
 #endif
 
@@ -931,9 +931,9 @@
 #endif
 
 #if defined(MBEDTLS_ECP_DOUBLE_JAC_ALT)
-    if ( mbedtls_int_ecp_grp_capable( grp ) )
+    if ( mbedtls_internal_ecp_grp_capable( grp ) )
     {
-        return mbedtls_int_ecp_double_jac( grp, R, P );
+        return mbedtls_internal_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_int_ecp_grp_capable( grp ) )
+    if ( mbedtls_internal_ecp_grp_capable( grp ) )
     {
-        return mbedtls_int_ecp_add_mixed( grp, R, P, Q );
+        return mbedtls_internal_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_int_ecp_grp_capable( grp ) )
+    if ( mbedtls_internal_ecp_grp_capable( grp ) )
     {
-        return mbedtls_int_ecp_randomize_jac( grp, pt, f_rng, p_rng );
+        return mbedtls_internal_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_int_ecp_grp_capable( grp ) )
+    if ( mbedtls_internal_ecp_grp_capable( grp ) )
     {
-        return mbedtls_int_ecp_normalize_mxz( grp, P );
+        return mbedtls_internal_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_int_ecp_grp_capable( grp ) )
+    if ( mbedtls_internal_ecp_grp_capable( grp ) )
     {
-        return mbedtls_int_ecp_randomize_mxz( grp, P, f_rng, p_rng );
+        return mbedtls_internal_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_int_ecp_grp_capable( grp ) )
+    if ( mbedtls_internal_ecp_grp_capable( grp ) )
     {
-        return mbedtls_int_ecp_double_add_mxz( grp, R, S, P, Q, d );
+        return mbedtls_internal_ecp_double_add_mxz( grp, R, S, P, Q, d );
     }
 #endif /* MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT */
 
@@ -1677,6 +1677,9 @@
              int (*f_rng)(void *, unsigned char *, size_t), void *p_rng )
 {
     int ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA;
+#if defined(MBEDTLS_ECP_INTERNAL_ALT)
+    char is_grp_capable = 0;
+#endif
 
     /* Common sanity checks */
     if( mbedtls_mpi_cmp_int( &P->Z, 1 ) != 0 )
@@ -1686,18 +1689,18 @@
         ( ret = mbedtls_ecp_check_pubkey( grp, P ) ) != 0 )
         return( ret );
 
-#if defined(MBEDTLS_ECP_FUNCTION_ALT)
+#if defined(MBEDTLS_ECP_INTERNAL_ALT)
 #if defined(MBEDTLS_THREADING_C)
-    if( mbedtls_mutex_lock( &mbedtls_threading_cryptohw_asym_mutex ) != 0 )
+    if( mbedtls_mutex_lock( &mbedtls_threading_ecp_mutex ) != 0 )
         return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR );
 
 #endif
-    if ( mbedtls_int_ecp_grp_capable( grp )  )
+    if ( is_grp_capable = mbedtls_internal_ecp_grp_capable( grp )  )
     {
-        MBEDTLS_MPI_CHK( mbedtls_int_ecp_init( grp ) );
+        MBEDTLS_MPI_CHK( mbedtls_internal_ecp_init( grp ) );
     }
 
-#endif /* MBEDTLS_ECP_FUNCTION_ALT */
+#endif /* MBEDTLS_ECP_INTERNAL_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,20 +1711,20 @@
         ret = ecp_mul_comb( grp, R, m, P, f_rng, p_rng );
 
 #endif
-#if defined(MBEDTLS_ECP_FUNCTION_ALT)
+#if defined(MBEDTLS_ECP_INTERNAL_ALT)
     cleanup:
 
-    if ( mbedtls_int_ecp_grp_capable( grp ) )
+    if ( is_grp_capable )
     {
-        mbedtls_int_ecp_deinit( grp );
+        mbedtls_internal_ecp_free( grp );
     }
 
 #if defined(MBEDTLS_THREADING_C)
-    if( mbedtls_mutex_unlock( &mbedtls_threading_cryptohw_asym_mutex ) != 0 )
+    if( mbedtls_mutex_unlock( &mbedtls_threading_ecp_mutex ) != 0 )
         return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR );
 
 #endif
-#endif /* MBEDTLS_ECP_FUNCTION_ALT */
+#endif /* MBEDTLS_ECP_INTERNAL_ALT */
     return( ret );
 }
 
@@ -1815,6 +1818,9 @@
 {
     int ret;
     mbedtls_ecp_point mP;
+#if defined(MBEDTLS_ECP_INTERNAL_ALT)
+    char is_grp_capable = 0;
+#endif
 
     if( ecp_get_type( grp ) != ECP_TYPE_SHORT_WEIERSTRASS )
         return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE );
@@ -1824,35 +1830,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)
+#if defined(MBEDTLS_ECP_INTERNAL_ALT)
 #if defined(MBEDTLS_THREADING_C)
-    if( mbedtls_mutex_lock( &mbedtls_threading_cryptohw_asym_mutex ) != 0 )
+    if( mbedtls_mutex_lock( &mbedtls_threading_ecp_mutex ) != 0 )
         return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR );
 
 #endif
-    if ( mbedtls_int_ecp_grp_capable( grp )  )
+    if (  is_grp_capable = mbedtls_internal_ecp_grp_capable( grp )  )
     {
-        MBEDTLS_MPI_CHK( mbedtls_int_ecp_init( grp ) );
+        MBEDTLS_MPI_CHK( mbedtls_internal_ecp_init( grp ) );
     }
 
-#endif /* MBEDTLS_ECP_FUNCTION_ALT */
+#endif /* MBEDTLS_ECP_INTERNAL_ALT */
     MBEDTLS_MPI_CHK( ecp_add_mixed( grp, R, &mP, R ) );
     MBEDTLS_MPI_CHK( ecp_normalize_jac( grp, R ) );
 
 cleanup:
 
-#if defined(MBEDTLS_ECP_FUNCTION_ALT)
-    if ( mbedtls_int_ecp_grp_capable( grp ) )
+#if defined(MBEDTLS_ECP_INTERNAL_ALT)
+    if ( is_grp_capable )
     {
-        mbedtls_int_ecp_deinit( grp );
+        mbedtls_internal_ecp_free( grp );
     }
 
 #if defined(MBEDTLS_THREADING_C)
-    if( mbedtls_mutex_unlock( &mbedtls_threading_cryptohw_asym_mutex ) != 0 )
+    if( mbedtls_mutex_unlock( &mbedtls_threading_ecp_mutex ) != 0 )
         return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR );
 
 #endif
-#endif /* MBEDTLS_ECP_FUNCTION_ALT */
+#endif /* MBEDTLS_ECP_INTERNAL_ALT */
     mbedtls_ecp_point_free( &mP );
 
     return( ret );
