diff --git a/include/polarssl/ecdh.h b/include/polarssl/ecdh.h
index 9cd0d4f..428275d 100644
--- a/include/polarssl/ecdh.h
+++ b/include/polarssl/ecdh.h
@@ -47,23 +47,24 @@
  */
 typedef struct
 {
-    ecp_group grp;      /*!<  ellipitic curve used      */
-    mpi d;              /*!<  our secret value          */
-    ecp_point Q;        /*!<  our public value          */
-    ecp_point Qp;       /*!<  peer's public value       */
-    mpi z;              /*!<  shared secret             */
-    int point_format;   /*!<  format for point export   */
-    ecp_point Vi;       /*!<  blinding value (for later)    */
-    ecp_point Vf;       /*!<  un-blinding value (for later) */
-    mpi _d;             /*!<  previous d                    */
+    ecp_group grp;      /*!<  ellipitic curve used                          */
+    mpi d;              /*!<  our secret value (private key)                */
+    ecp_point Q;        /*!<  our public value (public key)                 */
+    ecp_point Qp;       /*!<  peer's public value (public key)              */
+    mpi z;              /*!<  shared secret                                 */
+    int point_format;   /*!<  format for point export in TLS messages       */
+    ecp_point Vi;       /*!<  blinding value (for later)                    */
+    ecp_point Vf;       /*!<  un-blinding value (for later)                 */
+    mpi _d;             /*!<  previous d (for later)                        */
 }
 ecdh_context;
 
 /**
- * \brief           Generate a public key
+ * \brief           Generate a public key.
+ *                  Raw function that only does the core computation.
  *
  * \param grp       ECP group
- * \param d         Destination MPI (secret exponent)
+ * \param d         Destination MPI (secret exponent, aka private key)
  * \param Q         Destination point (public key)
  * \param f_rng     RNG function
  * \param p_rng     RNG parameter
@@ -77,11 +78,12 @@
 
 /**
  * \brief           Compute shared secret
+ *                  Raw function that only does the core computation.
  *
  * \param grp       ECP group
  * \param z         Destination MPI (shared secret)
  * \param Q         Public key from other party
- * \param d         Our secret exponent
+ * \param d         Our secret exponent (private key)
  * \param f_rng     RNG function (see notes)
  * \param p_rng     RNG parameter
  *
@@ -112,7 +114,8 @@
 void ecdh_free( ecdh_context *ctx );
 
 /**
- * \brief           Setup and write the ServerKeyExhange parameters
+ * \brief           Generate a public key and a TLS ServerKeyExchange payload.
+ *                  (First function used by a TLS server for ECDHE.)
  *
  * \param ctx       ECDH context
  * \param olen      number of chars written
@@ -132,7 +135,8 @@
                       void *p_rng );
 
 /**
- * \brief           Parse the ServerKeyExhange parameters
+ * \brief           Parse and procress a TLS ServerKeyExhange payload.
+ *                  (First function used by a TLS client for ECDHE.)
  *
  * \param ctx       ECDH context
  * \param buf       pointer to start of input buffer
@@ -144,7 +148,10 @@
                       const unsigned char **buf, const unsigned char *end );
 
 /**
- * \brief           Setup an ECDH context from an EC key
+ * \brief           Setup an ECDH context from an EC key.
+ *                  (Used by clients and servers in place of the
+ *                  ServerKeyEchange for static ECDH: import ECDH parameters
+ *                  from a certificate's EC key information.)
  *
  * \param ctx       ECDH constext to set
  * \param key       EC key to use
@@ -156,7 +163,8 @@
                      ecdh_side side );
 
 /**
- * \brief           Setup and export the client's public value
+ * \brief           Generate a public key and a TLS ClientKeyExchange payload.
+ *                  (Second function used by a TLS client for ECDH(E).)
  *
  * \param ctx       ECDH context
  * \param olen      number of bytes actually written
@@ -173,7 +181,8 @@
                       void *p_rng );
 
 /**
- * \brief           Parse and import the client's public value
+ * \brief           Parse and process a TLS ClientKeyExchange payload.
+ *                  (Second function used by a TLS server for ECDH(E).)
  *
  * \param ctx       ECDH context
  * \param buf       start of input buffer
@@ -185,7 +194,8 @@
                       const unsigned char *buf, size_t blen );
 
 /**
- * \brief           Derive and export the shared secret
+ * \brief           Derive and export the shared secret.
+ *                  (Last function used by both TLS client en servers.)
  *
  * \param ctx       ECDH context
  * \param olen      number of bytes written
