diff --git a/include/mbedtls/ecp.h b/include/mbedtls/ecp.h
index 43d001c..badfe86 100644
--- a/include/mbedtls/ecp.h
+++ b/include/mbedtls/ecp.h
@@ -515,13 +515,14 @@
  * \param grp       ECP group used
  * \param buf       Buffer to write to
  * \param size      Buffer size
- *
- * \return          Number of bytes written to \c buf,
+ * \param olen      Number of bytes written to \c buf
+ * \return          0 on success
  *                  or \c MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL
  *                  or \c MBEDTLS_ERR_OID_NOT_FOUND
  */
 int mbedtls_ecp_ansi_write_group( const mbedtls_ecp_group *grp,
-                                  unsigned char *p, size_t size );
+                                  unsigned char *p, size_t size,
+                                  size_t *olen );
 
 /**
  * \brief           Export a point in ANSI X9.62/RFC5480 ECPoint
@@ -533,8 +534,9 @@
  * \param format    Point format, should be a MBEDTLS_ECP_PF_XXX macro
  * \param p         Buffer to write to
  * \param size      Buffer size
+ * \param olen      Number of bytes written to \c buf
  *
- * \return          Number of bytes written to \c buf,
+ * \return          0 on success
  *                  or \c MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL
  *                  or \c MBEDTLS_ERR_ECP_BAD_INPUT_DATA
  *                  or \c MBEDTLS_ERR_ASN1_BUF_TOO_SMALL
@@ -542,7 +544,7 @@
 int mbedtls_ecp_ansi_write_point( const mbedtls_ecp_keypair *ec,
                                   int format,
                                   unsigned char *p,
-                                  size_t size );
+                                  size_t size, size_t *olen );
 #endif /* defined(MBEDTLS_ASN1_WRITE_C) && defined(MBEDTLS_OID_C) */
 
 /**
diff --git a/library/ecp.c b/library/ecp.c
index 851d230..58bffe4 100644
--- a/library/ecp.c
+++ b/library/ecp.c
@@ -2066,12 +2066,13 @@
 #include "mbedtls/oid.h"
 int mbedtls_ecp_ansi_write_group( const mbedtls_ecp_group *grp,
                                   unsigned char *p,
-                                  size_t size )
+                                  size_t size, size_t *olen )
 {
     const char *oid;
     unsigned char *q;
     size_t oid_length;
     int ret;
+
     ret = mbedtls_oid_get_oid_by_ec_grp( grp->id, &oid, &oid_length );
     if( ret != 0 )
         return( ret );
@@ -2079,36 +2080,38 @@
     if( size < 2 + oid_length )
         return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
     q = p + 2 + oid_length;
-    return( mbedtls_asn1_write_oid( &q, p, oid, oid_length ) );
+    *olen = mbedtls_asn1_write_oid( &q, p, oid, oid_length );
+    return ( 0 );
 }
 
 int mbedtls_ecp_ansi_write_point( const mbedtls_ecp_keypair *ec,
                                   int format,
                                   unsigned char *p,
-                                  size_t size )
+                                  size_t size, size_t *olen )
 {
     unsigned char *q;
-    size_t length;
-    size_t tl_size = 3; /* room for the OCTET_STRING tag and length */
+    size_t tl_max_size = 3; /* room for the OCTET_STRING tag and length */
     int ret;
-    if( size < tl_size )
+
+    if( size < tl_max_size )
         return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
-    q = p + tl_size;
+
+    q = p + tl_max_size;
     ret = mbedtls_ecp_point_write_binary( &ec->grp, &ec->Q,
                                           format,
-                                          &length, q, size - 3 );
+                                          olen, q, size - tl_max_size );
     if( ret < 0 )
         return( ret );
-    ret = mbedtls_asn1_write_len( &q, p, length );
+    ret = mbedtls_asn1_write_len( &q, p, *olen );
     if( ret < 0 )
         return( ret );
     ret = mbedtls_asn1_write_tag( &q, p, MBEDTLS_ASN1_OCTET_STRING );
     if( ret < 0 )
         return( ret );
-    length += tl_size - ( q - p );
+    *olen += tl_max_size - ( q - p );
     if( q != p )
-        memmove( p, q, length );
-    return( length );
+        memmove( p, q, *olen );
+    return( 0 );
 }
 #endif /* defined(MBEDTLS_ASN1_WRITE_C) && defined(MBEDTLS_OID_C) */
 
diff --git a/tests/suites/test_suite_ecp.function b/tests/suites/test_suite_ecp.function
index 4b81090..a3cde43 100644
--- a/tests/suites/test_suite_ecp.function
+++ b/tests/suites/test_suite_ecp.function
@@ -420,17 +420,20 @@
     unsigned char good[MBEDTLS_OID_EC_GRP_MAX_SIZE];
     unsigned char tested[MBEDTLS_OID_EC_GRP_MAX_SIZE];
     size_t good_len = unhexify( good, hex );
+    size_t received_len = 0;
     int ret = 0;
     mbedtls_ecp_group_init( &grp );
     TEST_ASSERT( mbedtls_ecp_group_load( &grp, id ) == 0 );
 
     /* Positive test */
-    ret = mbedtls_ecp_ansi_write_group( &grp, tested, sizeof( tested ) );
-    TEST_ASSERT( ret >= 0 && good_len == (unsigned) ret );
+    ret = mbedtls_ecp_ansi_write_group( &grp, tested, sizeof( tested ),
+										&received_len );
+    TEST_ASSERT( ret == 0 && good_len == (unsigned) received_len );
     TEST_ASSERT( memcmp( good, tested, good_len ) == 0 );
 
     /* Buffer too small */
-    TEST_ASSERT( mbedtls_ecp_ansi_write_group( &grp, tested, good_len - 1 ) ==
+    TEST_ASSERT( mbedtls_ecp_ansi_write_group( &grp, tested, good_len - 1,
+    										   &received_len ) ==
                  MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
 
 exit:
@@ -444,20 +447,23 @@
     unsigned char good_buf[1000];
     unsigned char tested_buf[1000];
     size_t good_len = unhexify( good_buf, good_hex );
+    size_t received_len = 0;
     mbedtls_pk_context pk;
-    int ret = 0;
+    int ret = -1;
     mbedtls_pk_init( &pk );
     TEST_ASSERT( mbedtls_pk_parse_public_keyfile( &pk, key_file ) == 0 );
 
     /* Positive test */
     ret = mbedtls_ecp_ansi_write_point( mbedtls_pk_ec( pk ), format,
-                                        tested_buf, sizeof( tested_buf ) );
-    TEST_ASSERT( ret >= 0 && good_len == (unsigned) ret );
+                                        tested_buf, sizeof( tested_buf ), 
+                                        &received_len );
+    TEST_ASSERT( ret == 0 && good_len == (unsigned) received_len );
     TEST_ASSERT( memcmp( good_buf, tested_buf, good_len ) == 0 );
 
     /* Buffer too small */
     TEST_ASSERT( mbedtls_ecp_ansi_write_point( mbedtls_pk_ec( pk ), format,
-                                               tested_buf, good_len - 1 ) ==
+                                               tested_buf, good_len - 1, 
+                                               &received_len ) ==
                  MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
 
 exit:
