diff --git a/library/ecp.c b/library/ecp.c
index 0c9feae..f2c7448 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -136,7 +136,7 @@
 /*
  * Init restart_mul sub-context
  */
-static void ecp_restart_mul_init( mbedtls_ecp_restart_mul_ctx *ctx )
+static void ecp_restart_rsm_init( mbedtls_ecp_restart_mul_ctx *ctx )
 {
     mbedtls_ecp_point_init( &ctx->R );
     ctx->i = 0;
@@ -148,7 +148,7 @@
 /*
  * Free the components of a restart_mul sub-context
  */
-static void ecp_restart_mul_free( mbedtls_ecp_restart_mul_ctx *ctx )
+static void ecp_restart_rsm_free( mbedtls_ecp_restart_mul_ctx *ctx )
 {
     unsigned char i;
 
@@ -164,7 +164,7 @@
         mbedtls_free( ctx->T );
     }
 
-    ecp_restart_mul_init( ctx );
+    ecp_restart_rsm_init( ctx );
 }
 
 /*
@@ -185,7 +185,7 @@
 /*
  * Init restart_muladd sub-context
  */
-static void ecp_restart_muladd_init( mbedtls_ecp_restart_muladd_ctx *ctx )
+static void ecp_restart_ma_init( mbedtls_ecp_restart_muladd_ctx *ctx )
 {
     mbedtls_ecp_point_init( &ctx->mP );
     mbedtls_ecp_point_init( &ctx->R );
@@ -195,7 +195,7 @@
 /*
  * Free the components of a restart_muladd sub-context
  */
-static void ecp_restart_muladd_free( mbedtls_ecp_restart_muladd_ctx *ctx )
+static void ecp_restart_ma_free( mbedtls_ecp_restart_muladd_ctx *ctx )
 {
     if( ctx == NULL )
         return;
@@ -203,7 +203,7 @@
     mbedtls_ecp_point_free( &ctx->mP );
     mbedtls_ecp_point_free( &ctx->R );
 
-    ecp_restart_muladd_init( ctx );
+    ecp_restart_ma_init( ctx );
 }
 
 /*
@@ -225,10 +225,10 @@
     if( ctx == NULL )
         return;
 
-    ecp_restart_mul_free( ctx->rsm );
+    ecp_restart_rsm_free( ctx->rsm );
     mbedtls_free( ctx->rsm );
 
-    ecp_restart_muladd_free( ctx->ma );
+    ecp_restart_ma_free( ctx->ma );
     mbedtls_free( ctx->ma );
 
     mbedtls_ecp_restart_init( ctx );
@@ -261,6 +261,44 @@
     return( 0 );
 }
 
+/* Call this when entering a function that needs its own sub-context */
+#define ECP_RS_ENTER( SUB )   do {                                 \
+    /* reset ops count for this call if top-level */                 \
+    if( rs_ctx != NULL && rs_ctx->depth++ == 0 )                 \
+        rs_ctx->ops_done = 0;                                    \
+                                                                     \
+    /* set up our own sub-context if needed */                       \
+    if( mbedtls_ecp_restart_enabled() &&                             \
+        rs_ctx != NULL && rs_ctx->SUB == NULL )                      \
+    {                                                                \
+        rs_ctx->SUB = mbedtls_calloc( 1, sizeof( *rs_ctx->SUB ) );   \
+        if( rs_ctx->SUB == NULL )                                    \
+            return( MBEDTLS_ERR_ECP_ALLOC_FAILED );                  \
+                                                                     \
+        ecp_restart_## SUB ##_init( rs_ctx->SUB );                 \
+    }                                                                \
+} while( 0 )
+
+/* Call this when leaving a function that needs its own sub-context */
+#define ECP_RS_LEAVE( SUB )   do {                                 \
+    /* clear our sub-context when not in progress (done or error) */ \
+    if( rs_ctx != NULL && rs_ctx->SUB != NULL &&                     \
+        ret != MBEDTLS_ERR_ECP_IN_PROGRESS )                         \
+    {                                                                \
+        ecp_restart_## SUB ##_free( rs_ctx->SUB );                 \
+        mbedtls_free( rs_ctx->SUB );                                 \
+        rs_ctx->SUB = NULL;                                          \
+    }                                                                \
+                                                                     \
+    if( rs_ctx != NULL )                                             \
+        rs_ctx->depth--;                                         \
+} while( 0 )
+
+#else /* MBEDTLS_ECP_RESTARTABLE */
+
+#define ECP_RS_ENTER( sub )     (void) rs_ctx;
+#define ECP_RS_LEAVE( sub )     (void) rs_ctx;
+
 #endif /* MBEDTLS_ECP_RESTARTABLE */
 
 #if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) ||   \
@@ -1872,21 +1910,7 @@
     unsigned char T_size = 0, T_ok = 0;
     mbedtls_ecp_point *T = NULL;
 
-#if !defined(MBEDTLS_ECP_RESTARTABLE)
-    (void) rs_ctx;
-#endif
-
-#if defined(MBEDTLS_ECP_RESTARTABLE)
-    /* set up our own sub-context if needed */
-    if( ecp_max_ops != 0 && rs_ctx != NULL && rs_ctx->rsm == NULL )
-    {
-        rs_ctx->rsm = mbedtls_calloc( 1, sizeof( mbedtls_ecp_restart_mul_ctx ) );
-        if( rs_ctx->rsm == NULL )
-            return( MBEDTLS_ERR_ECP_ALLOC_FAILED );
-
-        ecp_restart_mul_init( rs_ctx->rsm );
-    }
-#endif
+    ECP_RS_ENTER( rsm );
 
     /* Is P the base point ? */
 #if MBEDTLS_ECP_FIXED_POINT_OPTIM == 1
@@ -1987,16 +2011,7 @@
     if( ret != 0 )
         mbedtls_ecp_point_free( R );
 
-    /* clear our sub-context when not in progress (done or error) */
-#if defined(MBEDTLS_ECP_RESTARTABLE)
-    if( rs_ctx != NULL && rs_ctx->rsm != NULL &&
-        ret != MBEDTLS_ERR_ECP_IN_PROGRESS )
-    {
-        ecp_restart_mul_free( rs_ctx->rsm );
-        mbedtls_free( rs_ctx->rsm );
-        rs_ctx->rsm = NULL;
-    }
-#endif
+    ECP_RS_LEAVE( rsm );
 
     return( ret );
 }
@@ -2373,10 +2388,6 @@
     char is_grp_capable = 0;
 #endif
 
-#if !defined(MBEDTLS_ECP_RESTARTABLE)
-    (void) rs_ctx;
-#endif
-
     if( ecp_get_type( grp ) != ECP_TYPE_SHORT_WEIERSTRASS )
         return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE );
 
@@ -2387,21 +2398,9 @@
         MBEDTLS_MPI_CHK( mbedtls_internal_ecp_init( grp ) );
 #endif /* MBEDTLS_ECP_INTERNAL_ALT */
 
+    ECP_RS_ENTER( ma );
+
 #if defined(MBEDTLS_ECP_RESTARTABLE)
-    /* reset ops count for this call if top-level */
-    if( rs_ctx != NULL && rs_ctx->depth++ == 0 )
-        rs_ctx->ops_done = 0;
-
-    /* set up our own sub-context if needed */
-    if( ecp_max_ops != 0 && rs_ctx != NULL && rs_ctx->ma == NULL )
-    {
-        rs_ctx->ma = mbedtls_calloc( 1, sizeof( mbedtls_ecp_restart_muladd_ctx ) );
-        if( rs_ctx->ma == NULL )
-            return( MBEDTLS_ERR_ECP_ALLOC_FAILED );
-
-        ecp_restart_muladd_init( rs_ctx->ma );
-    }
-
     if( rs_ctx != NULL && rs_ctx->ma != NULL )
     {
         /* redirect intermediate results to restart context */
@@ -2456,19 +2455,7 @@
 
     mbedtls_ecp_point_free( &mP );
 
-#if defined(MBEDTLS_ECP_RESTARTABLE)
-    /* clear our sub-context when not in progress (done or error) */
-    if( rs_ctx != NULL && rs_ctx->ma != NULL &&
-        ret != MBEDTLS_ERR_ECP_IN_PROGRESS )
-    {
-        ecp_restart_muladd_free( rs_ctx->ma );
-        mbedtls_free( rs_ctx->ma );
-        rs_ctx->ma = NULL;
-    }
-
-    if( rs_ctx != NULL )
-        rs_ctx->depth--;
-#endif /* MBEDTLS_ECP_RESTARTABLE */
+    ECP_RS_LEAVE( ma );
 
     return( ret );
 }
