diff --git a/include/mbedtls/config.h b/include/mbedtls/config.h
index 47c719640..ec004f5b3 100644
--- a/include/mbedtls/config.h
+++ b/include/mbedtls/config.h
@@ -267,6 +267,7 @@
 //#define MBEDTLS_BLOWFISH_ALT
 //#define MBEDTLS_CAMELLIA_ALT
 //#define MBEDTLS_DES_ALT
+//#define MBEDTLS_RSA_ALT
 //#define MBEDTLS_XTEA_ALT
 //#define MBEDTLS_MD2_ALT
 //#define MBEDTLS_MD4_ALT
diff --git a/include/mbedtls/rsa.h b/include/mbedtls/rsa.h
index 8aefdb660..0deff0031 100644
--- a/include/mbedtls/rsa.h
+++ b/include/mbedtls/rsa.h
@@ -209,6 +209,8 @@ int mbedtls_rsa_check_params( mbedtls_mpi *N, mbedtls_mpi *P, mbedtls_mpi *Q,
  * Implementation of RSA interface
  */
 
+#if !defined(MBEDTLS_RSA_ALT)
+
 /**
  * \brief          RSA context structure
  */
@@ -252,6 +254,12 @@ typedef struct
 }
 mbedtls_rsa_context;
 
+#else
+
+#include "rsa_alt.h"
+
+#endif /* MBEDTLS_RSA_ALT */
+
 /**
  * \brief          Initialize an RSA context
  *
diff --git a/library/rsa.c b/library/rsa.c
index dc1fae59c..2976b71c2 100644
--- a/library/rsa.c
+++ b/library/rsa.c
@@ -464,6 +464,7 @@ cleanup:
  * Default RSA interface implementation
  */
 
+#if !defined(MBEDTLS_RSA_ALT)
 
 int mbedtls_rsa_import( mbedtls_rsa_context *ctx,
                         const mbedtls_mpi *N,
@@ -2493,6 +2494,8 @@ void mbedtls_rsa_free( mbedtls_rsa_context *ctx )
 #endif
 }
 
+#endif /* !MBEDTLS_RSA_ALT */
+
 #if defined(MBEDTLS_SELF_TEST)
 
 #include "mbedtls/sha1.h"
diff --git a/library/version_features.c b/library/version_features.c
index 5cbe8aca3..9bf6c61ec 100644
--- a/library/version_features.c
+++ b/library/version_features.c
@@ -99,6 +99,9 @@ static const char *features[] = {
 #if defined(MBEDTLS_DES_ALT)
     "MBEDTLS_DES_ALT",
 #endif /* MBEDTLS_DES_ALT */
+#if defined(MBEDTLS_RSA_ALT)
+    "MBEDTLS_RSA_ALT",
+#endif /* MBEDTLS_RSA_ALT */
 #if defined(MBEDTLS_XTEA_ALT)
     "MBEDTLS_XTEA_ALT",
 #endif /* MBEDTLS_XTEA_ALT */