diff --git a/include/mbedtls/config.h b/include/mbedtls/config.h
index 2b7e9da..8290c51 100644
--- a/include/mbedtls/config.h
+++ b/include/mbedtls/config.h
@@ -3650,7 +3650,7 @@
  *
  * If this option is set, the API mbedtls_ssl_conf_ciphersuites() is removed.
  */
-//#define MBEDTLS_SSL_SINGLE_CIPHERSUITE MBEDTLS_SUITE_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
+//#define MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE MBEDTLS_SUITE_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
 
 /* \} SECTION: Compile-time SSL configuration */
 
diff --git a/include/mbedtls/ssl.h b/include/mbedtls/ssl.h
index daa9d74..0a1d9d5 100644
--- a/include/mbedtls/ssl.h
+++ b/include/mbedtls/ssl.h
@@ -923,9 +923,9 @@
 #if defined(MBEDTLS_HAVE_TIME)
     mbedtls_time_t start;       /*!< starting time      */
 #endif
-#if !defined(MBEDTLS_SSL_SINGLE_CIPHERSUITE)
+#if !defined(MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE)
     int ciphersuite;            /*!< chosen ciphersuite */
-#endif /* MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#endif /* MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
     int compression;            /*!< chosen compression */
     size_t id_len;              /*!< session id length  */
     unsigned char id[32];       /*!< session identifier */
@@ -974,9 +974,9 @@
      * Pointers
      */
 
-#if !defined(MBEDTLS_SSL_SINGLE_CIPHERSUITE)
+#if !defined(MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE)
     const int *ciphersuite_list[4]; /*!< allowed ciphersuites per version   */
-#endif /* MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#endif /* MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 
     /** Callback for printing debug output                                  */
     void (*f_dbg)(void *, int, const char *, int, const char *);
@@ -2470,7 +2470,7 @@
  */
 const mbedtls_ssl_session *mbedtls_ssl_get_session_pointer( const mbedtls_ssl_context *ssl );
 
-#if !defined(MBEDTLS_SSL_SINGLE_CIPHERSUITE)
+#if !defined(MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE)
 /**
  * \brief               Set the list of allowed ciphersuites and the preference
  *                      order. First in the list has the highest preference.
@@ -2485,7 +2485,7 @@
  *
  * \note                On constrained systems, support for a single ciphersuite
  *                      (in all versions) can be fixed at compile-time through
- *                      the configuration option MBEDTLS_SSL_SINGLE_CIPHERSUITE.
+ *                      the configuration option MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE.
  *
  * \param conf          SSL configuration
  * \param ciphersuites  0-terminated list of allowed ciphersuites
@@ -2514,12 +2514,12 @@
  *
  * \note                On constrained systems, support for a single ciphersuite
  *                      (in all versions) can be fixed at compile-time through
- *                      the configuration option MBEDTLS_SSL_SINGLE_CIPHERSUITE.
+ *                      the configuration option MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE.
  */
 void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf,
                                        const int *ciphersuites,
                                        int major, int minor );
-#endif /* !MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#endif /* !MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 
 #define MBEDTLS_SSL_UNEXPECTED_CID_IGNORE 0
 #define MBEDTLS_SSL_UNEXPECTED_CID_FAIL   1
diff --git a/include/mbedtls/ssl_ciphersuites.h b/include/mbedtls/ssl_ciphersuites.h
index c8cfacd..281caa6 100644
--- a/include/mbedtls/ssl_ciphersuites.h
+++ b/include/mbedtls/ssl_ciphersuites.h
@@ -351,8 +351,8 @@
 /* Wrapper around MBEDTLS_SSL_SUITE_XXX_T() which makes sure that
  * the argument is macro-expanded before concatenated with the
  * field name. This allows to call these macros as
- *    MBEDTLS_SSL_SUITE_XXX( MBEDTLS_SSL_SINGLE_CIPHERSUITE ),
- * where MBEDTLS_SSL_SINGLE_CIPHERSUITE expands to MBEDTLS_SSL_SUITE_XXX. */
+ *    MBEDTLS_SSL_SUITE_XXX( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ),
+ * where MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE expands to MBEDTLS_SSL_SUITE_XXX. */
 #define MBEDTLS_SSL_SUITE_ID(            SUITE ) MBEDTLS_SSL_SUITE_ID_T(            SUITE )
 #define MBEDTLS_SSL_SUITE_NAME(          SUITE ) MBEDTLS_SSL_SUITE_NAME_T(          SUITE )
 #define MBEDTLS_SSL_SUITE_CIPHER(        SUITE ) MBEDTLS_SSL_SUITE_CIPHER_T(        SUITE )
@@ -364,7 +364,7 @@
 #define MBEDTLS_SSL_SUITE_MAX_MINOR_VER( SUITE ) MBEDTLS_SSL_SUITE_MAX_MINOR_VER_T( SUITE )
 #define MBEDTLS_SSL_SUITE_FLAGS(         SUITE ) MBEDTLS_SSL_SUITE_FLAGS_T(         SUITE )
 
-#if !defined(MBEDTLS_SSL_SINGLE_CIPHERSUITE)
+#if !defined(MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE)
 /**
  * \brief   This structure is used for storing ciphersuite information
  */
@@ -404,13 +404,13 @@
       MBEDTLS_SSL_SUITE_MAX_MINOR_VER( SUITE ),   \
       MBEDTLS_SSL_SUITE_FLAGS( SUITE ) }
 
-#else /* !MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#else /* !MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 
 typedef unsigned char mbedtls_ssl_ciphersuite_handle_t;
 #define MBEDTLS_SSL_CIPHERSUITE_INVALID_HANDLE      ( (mbedtls_ssl_ciphersuite_handle_t) 0 )
 #define MBEDTLS_SSL_CIPHERSUITE_UNIQUE_VALID_HANDLE ( (mbedtls_ssl_ciphersuite_handle_t) 1 )
 
-#endif /* MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#endif /* MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 
 /*
  * Getter functions for the extraction of ciphersuite attributes
@@ -421,7 +421,7 @@
  * is passed.
  */
 
-#if !defined(MBEDTLS_SSL_SINGLE_CIPHERSUITE)
+#if !defined(MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE)
 /*
  * Implementation of getter functions when the ciphersuite handle
  * is a pointer to the ciphersuite information structure.
@@ -479,7 +479,7 @@
 {
     return( info->flags );
 }
-#else /* !MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#else /* !MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 /*
  * Implementations of getter functions in the case of only
  * a single possible ciphersuite. In this case, the handle
@@ -493,63 +493,63 @@
     mbedtls_ssl_ciphersuite_handle_t const info )
 {
     ((void) info);
-    return( MBEDTLS_SSL_SUITE_ID( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_ID( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
 static inline const char* mbedtls_ssl_suite_get_name(
     mbedtls_ssl_ciphersuite_handle_t const info )
 {
     ((void) info);
-    return( MBEDTLS_SSL_SUITE_NAME( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_NAME( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
 static inline mbedtls_cipher_type_t mbedtls_ssl_suite_get_cipher(
     mbedtls_ssl_ciphersuite_handle_t const info )
 {
     ((void) info);
-    return( MBEDTLS_SSL_SUITE_CIPHER( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_CIPHER( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
 static inline mbedtls_md_type_t mbedtls_ssl_suite_get_mac(
     mbedtls_ssl_ciphersuite_handle_t const info )
 {
     ((void) info);
-    return( MBEDTLS_SSL_SUITE_MAC( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_MAC( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
 static inline mbedtls_key_exchange_type_t mbedtls_ssl_suite_get_key_exchange(
     mbedtls_ssl_ciphersuite_handle_t const info )
 {
     ((void) info);
-    return( MBEDTLS_SSL_SUITE_KEY_EXCHANGE( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_KEY_EXCHANGE( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
 static inline int mbedtls_ssl_suite_get_min_major_ver(
     mbedtls_ssl_ciphersuite_handle_t const info )
 {
     ((void) info);
-    return( MBEDTLS_SSL_SUITE_MIN_MAJOR_VER( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_MIN_MAJOR_VER( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
 static inline int mbedtls_ssl_suite_get_min_minor_ver(
     mbedtls_ssl_ciphersuite_handle_t const info )
 {
     ((void) info);
-    return( MBEDTLS_SSL_SUITE_MIN_MINOR_VER( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_MIN_MINOR_VER( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
 static inline int mbedtls_ssl_suite_get_max_major_ver(
     mbedtls_ssl_ciphersuite_handle_t const info )
 {
     ((void) info);
-    return( MBEDTLS_SSL_SUITE_MAX_MAJOR_VER( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_MAX_MAJOR_VER( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
 static inline int mbedtls_ssl_suite_get_max_minor_ver(
     mbedtls_ssl_ciphersuite_handle_t const info )
 {
     ((void) info);
-    return( MBEDTLS_SSL_SUITE_MAX_MINOR_VER( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_MAX_MINOR_VER( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
 static inline unsigned char mbedtls_ssl_suite_get_flags(
     mbedtls_ssl_ciphersuite_handle_t const info )
 {
     ((void) info);
-    return( MBEDTLS_SSL_SUITE_FLAGS( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_FLAGS( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
-#endif /* MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#endif /* MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 
 static inline int mbedtls_ssl_ciphersuite_has_pfs(
     mbedtls_ssl_ciphersuite_handle_t info )
@@ -681,20 +681,20 @@
     }
 }
 
-#if !defined(MBEDTLS_SSL_SINGLE_CIPHERSUITE)
+#if !defined(MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE)
 static inline int mbedtls_ssl_session_get_ciphersuite(
     mbedtls_ssl_session const * session )
 {
     return( session->ciphersuite );
 }
-#else /* !MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#else /* !MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 static inline int mbedtls_ssl_session_get_ciphersuite(
     mbedtls_ssl_session const * session )
 {
     ((void) session);
-    return( MBEDTLS_SSL_SUITE_ID( MBEDTLS_SSL_SINGLE_CIPHERSUITE ) );
+    return( MBEDTLS_SSL_SUITE_ID( MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE ) );
 }
-#endif /* MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#endif /* MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 
 const int *mbedtls_ssl_list_ciphersuites( void );
 
diff --git a/include/mbedtls/ssl_internal.h b/include/mbedtls/ssl_internal.h
index 0dbf60e..a4d4eea 100644
--- a/include/mbedtls/ssl_internal.h
+++ b/include/mbedtls/ssl_internal.h
@@ -501,9 +501,9 @@
                     const unsigned char *, size_t,
                     unsigned char *, size_t);
 
-#if !defined(MBEDTLS_SSL_SINGLE_CIPHERSUITE)
+#if !defined(MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE)
     mbedtls_ssl_ciphersuite_handle_t ciphersuite_info;
-#endif /* !MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#endif /* !MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 
     size_t pmslen;                      /*!<  premaster length        */
 
@@ -558,20 +558,20 @@
 }
 #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */
 
-#if !defined(MBEDTLS_SSL_SINGLE_CIPHERSUITE)
+#if !defined(MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE)
 static inline mbedtls_ssl_ciphersuite_handle_t mbedtls_ssl_handshake_get_ciphersuite(
     mbedtls_ssl_handshake_params const *handshake )
 {
     return( handshake->ciphersuite_info );
 }
-#else /* !MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#else /* !MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 static inline mbedtls_ssl_ciphersuite_handle_t mbedtls_ssl_handshake_get_ciphersuite(
     mbedtls_ssl_handshake_params const *handshake )
 {
     ((void) handshake);
     return( MBEDTLS_SSL_CIPHERSUITE_UNIQUE_VALID_HANDLE );
 }
-#endif /* MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#endif /* MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 
 typedef struct mbedtls_ssl_hs_buffer mbedtls_ssl_hs_buffer;
 
@@ -1454,7 +1454,7 @@
  * instantiation in case a single ciphersuite is enabled at
  * compile-time.
  */
-#if !defined(MBEDTLS_SSL_SINGLE_CIPHERSUITE)
+#if !defined(MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE)
 
 #define MBEDTLS_SSL_BEGIN_FOR_EACH_CIPHERSUITE( ssl, ver, info ) \
     {                                                            \
@@ -1472,7 +1472,7 @@
         }                                     \
     }
 
-#else /* !MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#else /* !MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 
 #define MBEDTLS_SSL_BEGIN_FOR_EACH_CIPHERSUITE( ssl, ver, info )             \
     {                                                                        \
@@ -1482,6 +1482,6 @@
 #define MBEDTLS_SSL_END_FOR_EACH_CIPHERSUITE    \
     }
 
-#endif /* MBEDTLS_SSL_SINGLE_CIPHERSUITE */
+#endif /* MBEDTLS_SSL_CONF_SINGLE_CIPHERSUITE */
 
 #endif /* ssl_internal.h */
