diff --git a/library/ecp.c b/library/ecp.c
index 992c436..ad6e5f5 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -115,13 +115,10 @@
  *  - size in bits
  *  - readable name
  *
- * The sequence of elements in this list also determines the default preference
- * of the curves used by an ECHDE handshake.
- * We start with the most secure curves. From the same sized curves, we prefer
- * the SECP ones because they are much faster.
- *
+ * Curves are listed in order: largest curves first, and for a given size,
+ * fastest curves first. This provides the default order for the SSL module.
  */
-static const ecp_curve_info ecp_supported_curves[] =
+static const ecp_curve_info ecp_supported_curves[POLARSSL_ECP_DP_MAX] =
 {
 #if defined(POLARSSL_ECP_DP_SECP521R1_ENABLED)
     { POLARSSL_ECP_DP_SECP521R1,    25,     521,    "secp521r1"         },
@@ -138,28 +135,28 @@
 #if defined(POLARSSL_ECP_DP_SECP256R1_ENABLED)
     { POLARSSL_ECP_DP_SECP256R1,    23,     256,    "secp256r1"         },
 #endif
+#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED)
+    { POLARSSL_ECP_DP_SECP256K1,    22,     256,    "secp256k1"         },
+#endif
 #if defined(POLARSSL_ECP_DP_BP256R1_ENABLED)
     { POLARSSL_ECP_DP_BP256R1,      26,     256,    "brainpoolP256r1"   },
 #endif
 #if defined(POLARSSL_ECP_DP_SECP224R1_ENABLED)
     { POLARSSL_ECP_DP_SECP224R1,    21,     224,    "secp224r1"         },
 #endif
-#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED)
-    { POLARSSL_ECP_DP_SECP192R1,    19,     192,    "secp192r1"         },
-#endif
-#if defined(POLARSSL_ECP_DP_SECP256K1_ENABLED)
-    { POLARSSL_ECP_DP_SECP256K1,    22,     256,    "secp256k1"         },
-#endif
 #if defined(POLARSSL_ECP_DP_SECP224K1_ENABLED)
     { POLARSSL_ECP_DP_SECP224K1,    20,     224,    "secp224k1"         },
 #endif
+#if defined(POLARSSL_ECP_DP_SECP192R1_ENABLED)
+    { POLARSSL_ECP_DP_SECP192R1,    19,     192,    "secp192r1"         },
+#endif
 #if defined(POLARSSL_ECP_DP_SECP192K1_ENABLED)
     { POLARSSL_ECP_DP_SECP192K1,    18,     192,    "secp192k1"         },
 #endif
     { POLARSSL_ECP_DP_NONE,          0,     0,      NULL                },
 };
-#define ECP_NUM_SUPPORTED_CURVES ( sizeof( ecp_supported_curves ) / \
-                                   sizeof( ecp_curve_info )         )
+
+static ecp_group_id ecp_supported_grp_id[POLARSSL_ECP_DP_MAX];
 
 /*
  * List of supported curves and associated info
@@ -170,7 +167,33 @@
 }
 
 /*
- * Get the curve info for the internal identifer
+ * List of supported curves, group ID only
+ */
+const ecp_group_id *ecp_grp_id_list( void )
+{
+    static int init_done = 0;
+
+    if( ! init_done )
+    {
+        size_t i = 0;
+        const ecp_curve_info *curve_info;
+
+        for( curve_info = ecp_curve_list();
+             curve_info->grp_id != POLARSSL_ECP_DP_NONE;
+             curve_info++ )
+        {
+            ecp_supported_grp_id[i++] = curve_info->grp_id;
+        }
+        ecp_supported_grp_id[i] = POLARSSL_ECP_DP_NONE;
+
+        init_done = 1;
+    }
+
+    return ecp_supported_grp_id;
+}
+
+/*
+ * Get the curve info for the internal identifier
  */
 const ecp_curve_info *ecp_curve_info_from_grp_id( ecp_group_id grp_id )
 {
@@ -224,23 +247,6 @@
 }
 
 /*
- * Get the default ECDH curve list
- */
-ecp_group_id *ecp_get_default_echd_curve_list( void )
-{
-    static ecp_group_id ecdh_default_curve_list[ECP_NUM_SUPPORTED_CURVES];
-    int i;
-
-    /* Build the list of default curves based on ecp_supported_curves[] */
-    for( i = 0; i < ECP_NUM_SUPPORTED_CURVES; i++)
-    {
-        ecdh_default_curve_list[i] = ecp_supported_curves[i].grp_id;
-    }
-
-    return ecdh_default_curve_list;
-}
-
-/*
  * Get the type of a curve
  */
 static inline ecp_curve_type ecp_get_type( const ecp_group *grp )
