diff --git a/include/polarssl/pk.h b/include/polarssl/pk.h
index 778efa7..6a3d4b8 100644
--- a/include/polarssl/pk.h
+++ b/include/polarssl/pk.h
@@ -52,7 +52,7 @@
  * \warning You must make sure the PK context actually holds an RSA context
  * before using this macro!
  */
-#define pk_rsa( pk )        ( (rsa_context *) (pk).data )
+#define pk_rsa( pk )        ( (rsa_context *) (pk).pk_ctx )
 #endif /* POLARSSL_RSA_C */
 
 #if defined(POLARSSL_ECP_C)
@@ -62,7 +62,7 @@
  * \warning You must make sure the PK context actually holds an EC context
  * before using this macro!
  */
-#define pk_ec( pk )         ( (ecp_keypair *) (pk).data )
+#define pk_ec( pk )         ( (ecp_keypair *) (pk).pk_ctx )
 #endif /* POLARSSL_ECP_C */
 
 
@@ -105,7 +105,7 @@
 #define POLARSSL_PK_DEBUG_MAX_ITEMS 3
 
 /**
- * \brief           Public key info
+ * \brief           Public key information and operations
  */
 typedef struct
 {
@@ -142,8 +142,8 @@
  */
 typedef struct
 {
-    const pk_info_t *   info;       /**< Public key informations */
-    void *              data;       /**< Public key data */
+    const pk_info_t *   pk_info;    /**< Public key informations        */
+    void *              pk_ctx;     /**< Underlying public key context  */
 } pk_context;
 
 /**
@@ -217,6 +217,15 @@
  */
 int pk_debug( const pk_context *ctx, pk_debug_item *items );
 
+/**
+ * \brief           Access the type name
+ *
+ * \param ctx       Context to use
+ *
+ * \return          Type name on success, or "invalid PK"
+ */
+const char * pk_get_name( const pk_context *ctx );
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/library/pk.c b/library/pk.c
index f3c64cb..d8b4c85 100644
--- a/library/pk.c
+++ b/library/pk.c
@@ -55,8 +55,8 @@
     if( ctx == NULL )
         return;
 
-    ctx->info = NULL;
-    ctx->data = NULL;
+    ctx->pk_info = NULL;
+    ctx->pk_ctx = NULL;
 }
 
 /*
@@ -64,13 +64,13 @@
  */
 void pk_free( pk_context *ctx )
 {
-    if( ctx == NULL || ctx->info == NULL)
+    if( ctx == NULL || ctx->pk_info == NULL)
         return;
 
-    ctx->info->ctx_free_func( ctx->data );
-    ctx->data = NULL;
+    ctx->pk_info->ctx_free_func( ctx->pk_ctx );
+    ctx->pk_ctx = NULL;
 
-    ctx->info = NULL;
+    ctx->pk_info = NULL;
 }
 
 /*
@@ -105,9 +105,9 @@
 {
     const pk_info_t *info;
 
-    if( ctx->info != NULL )
+    if( ctx->pk_info != NULL )
     {
-        if( ctx->info->type == type )
+        if( ctx->pk_info->type == type )
             return 0;
 
         return( POLARSSL_ERR_PK_TYPE_MISMATCH );
@@ -116,10 +116,10 @@
     if( ( info = pk_info_from_type( type ) ) == NULL )
         return( POLARSSL_ERR_PK_TYPE_MISMATCH );
 
-    if( ( ctx->data = info->ctx_alloc_func() ) == NULL )
+    if( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL )
         return( POLARSSL_ERR_PK_MALLOC_FAILED );
 
-    ctx->info = info;
+    ctx->pk_info = info;
 
     return( 0 );
 }
@@ -130,10 +130,10 @@
 int pk_can_do( pk_context *ctx, pk_type_t type )
 {
     /* null of NONE context can't do anything */
-    if( ctx == NULL || ctx->info == NULL )
+    if( ctx == NULL || ctx->pk_info == NULL )
         return( 0 );
 
-    return( ctx->info->can_do( type ) );
+    return( ctx->pk_info->can_do( type ) );
 }
 
 /*
@@ -143,10 +143,10 @@
                const unsigned char *hash, const md_info_t *md_info,
                const unsigned char *sig, size_t sig_len )
 {
-    if( ctx == NULL || ctx->info == NULL )
+    if( ctx == NULL || ctx->pk_info == NULL )
         return( POLARSSL_ERR_PK_TYPE_MISMATCH ); // TODO
 
-    return( ctx->info->verify_func( ctx->data, hash, md_info, sig, sig_len ) );
+    return( ctx->pk_info->verify_func( ctx->pk_ctx, hash, md_info, sig, sig_len ) );
 }
 
 /*
@@ -154,10 +154,10 @@
  */
 size_t pk_get_size( const pk_context *ctx )
 {
-    if( ctx == NULL || ctx->info == NULL )
+    if( ctx == NULL || ctx->pk_info == NULL )
         return( 0 );
 
-    return( ctx->info->get_size( ctx->data ) );
+    return( ctx->pk_info->get_size( ctx->pk_ctx ) );
 }
 
 /*
@@ -165,9 +165,20 @@
  */
 int pk_debug( const pk_context *ctx, pk_debug_item *items )
 {
-    if( ctx == NULL || ctx->info == NULL )
+    if( ctx == NULL || ctx->pk_info == NULL )
         return( POLARSSL_ERR_PK_TYPE_MISMATCH ); // TODO
 
-    ctx->info->debug_func( ctx->data, items );
+    ctx->pk_info->debug_func( ctx->pk_ctx, items );
     return( 0 );
 }
+
+/*
+ * Access the PK type name
+ */
+const char * pk_get_name( const pk_context *ctx )
+{
+    if( ctx == NULL || ctx->pk_info == NULL )
+        return( "invalid PK" );
+
+    return( ctx->pk_info->name );
+}
diff --git a/library/x509parse.c b/library/x509parse.c
index 225f45d..e080174 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -2147,7 +2147,7 @@
     ret = x509parse_keyfile( &pk, path, pwd );
 
     if( ret == 0 )
-        rsa_copy( rsa, pk.data );
+        rsa_copy( rsa, pk_rsa( pk ) );
     else
         rsa_free( rsa );
 
@@ -2170,7 +2170,7 @@
     ret = x509parse_public_keyfile( &pk, path );
 
     if( ret == 0 )
-        rsa_copy( rsa, pk.data );
+        rsa_copy( rsa, pk_rsa( pk ) );
     else
         rsa_free( rsa );
 
@@ -2774,7 +2774,7 @@
     ret = x509parse_key( &pk, key, keylen, pwd, pwdlen );
 
     if( ret == 0 )
-        rsa_copy( rsa, pk.data );
+        rsa_copy( rsa, pk_rsa( pk ) );
     else
         rsa_free( rsa );
 
@@ -2798,7 +2798,7 @@
     ret = x509parse_public_key( &pk, key, keylen );
 
     if( ret == 0 )
-        rsa_copy( rsa, pk.data );
+        rsa_copy( rsa, pk_rsa( pk ) );
     else
         rsa_free( rsa );
 
@@ -3141,7 +3141,7 @@
     SAFE_SNPRINTF();
 
     if( ( ret = x509_key_size_helper( key_size_str, BEFORE_COLON,
-                                      crt->pk.info->name ) ) != 0 )
+                                      pk_get_name( &crt->pk ) ) ) != 0 )
     {
         return( ret );
     }
diff --git a/tests/suites/test_suite_x509parse.function b/tests/suites/test_suite_x509parse.function
index 6bda6fa..ce27a9f 100644
--- a/tests/suites/test_suite_x509parse.function
+++ b/tests/suites/test_suite_x509parse.function
@@ -227,7 +227,7 @@
     {
         ecp_keypair *eckey;
         TEST_ASSERT( pk_can_do( &ctx, POLARSSL_PK_ECKEY ) );
-        eckey = (ecp_keypair *) ctx.data;
+        eckey = pk_ec( ctx );
         TEST_ASSERT( ecp_check_pubkey( &eckey->grp, &eckey->Q ) == 0 );
     }
 
@@ -251,7 +251,7 @@
     {
         ecp_keypair *eckey;
         TEST_ASSERT( pk_can_do( &ctx, POLARSSL_PK_ECKEY ) );
-        eckey = (ecp_keypair *) ctx.data;
+        eckey = pk_ec( ctx );
         TEST_ASSERT( ecp_check_privkey( &eckey->grp, &eckey->d ) == 0 );
     }
 
