diff --git a/library/rsa.c b/library/rsa.c
index 47884f9..da98336 100644
--- a/library/rsa.c
+++ b/library/rsa.c
@@ -128,7 +128,7 @@
         return( POLARSSL_ERR_RSA_KEY_GEN_FAILED + ret );
     }
 
-    return( 0 );   
+    return( 0 );
 }
 
 #endif
@@ -141,7 +141,7 @@
     if( !ctx->N.p || !ctx->E.p )
         return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED );
 
-    if( ( ctx->N.p[0] & 1 ) == 0 || 
+    if( ( ctx->N.p[0] & 1 ) == 0 ||
         ( ctx->E.p[0] & 1 ) == 0 )
         return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED );
 
@@ -183,7 +183,7 @@
     MPI_CHK( mpi_gcd( &G, &ctx->E, &H  ) );
 
     MPI_CHK( mpi_gcd( &G2, &P1, &Q1 ) );
-    MPI_CHK( mpi_div_mpi( &L1, &L2, &H, &G2 ) );  
+    MPI_CHK( mpi_div_mpi( &L1, &L2, &H, &G2 ) );
     MPI_CHK( mpi_mod_mpi( &I, &DE, &L1  ) );
 
     MPI_CHK( mpi_mod_mpi( &DP, &ctx->D, &P1 ) );
@@ -202,7 +202,7 @@
     {
         ret = POLARSSL_ERR_RSA_KEY_CHECK_FAILED;
     }
-    
+
 cleanup:
     mpi_free( &PQ ); mpi_free( &DE ); mpi_free( &P1 ); mpi_free( &Q1 );
     mpi_free( &H  ); mpi_free( &I  ); mpi_free( &G  ); mpi_free( &G2 );
@@ -348,8 +348,8 @@
  * \param slen      length of the source buffer
  * \param md_ctx    message digest context to use
  */
-static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src, size_t slen,  
-                       md_context_t *md_ctx )
+static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src,
+                      size_t slen, md_context_t *md_ctx )
 {
     unsigned char mask[POLARSSL_MD_MAX_SIZE];
     unsigned char counter[4];
@@ -459,6 +459,7 @@
 }
 #endif /* POLARSSL_PKCS1_V21 */
 
+#if defined(POLARSSL_PKCS1_V15)
 /*
  * Implementation of the PKCS#1 v2.1 RSAES-PKCS1-V1_5-ENCRYPT function
  */
@@ -519,6 +520,7 @@
             ? rsa_public(  ctx, output, output )
             : rsa_private( ctx, f_rng, p_rng, output, output ) );
 }
+#endif /* POLARSSL_PKCS1_V15 */
 
 /*
  * Add the message padding, then do an RSA operation
@@ -532,9 +534,11 @@
 {
     switch( ctx->padding )
     {
+#if defined(POLARSSL_PKCS1_V15)
         case RSA_PKCS_V15:
             return rsa_rsaes_pkcs1_v15_encrypt( ctx, f_rng, p_rng, mode, ilen,
                                                 input, output );
+#endif
 
 #if defined(POLARSSL_PKCS1_V21)
         case RSA_PKCS_V21:
@@ -641,6 +645,7 @@
 }
 #endif /* POLARSSL_PKCS1_V21 */
 
+#if defined(POLARSSL_PKCS1_V15)
 /*
  * Implementation of the PKCS#1 v2.1 RSAES-PKCS1-V1_5-DECRYPT function
  */
@@ -735,6 +740,7 @@
 
     return( 0 );
 }
+#endif /* POLARSSL_PKCS1_V15 */
 
 /*
  * Do an RSA operation, then remove the message padding
@@ -749,9 +755,11 @@
 {
     switch( ctx->padding )
     {
+#if defined(POLARSSL_PKCS1_V15)
         case RSA_PKCS_V15:
             return rsa_rsaes_pkcs1_v15_decrypt( ctx, f_rng, p_rng, mode, olen,
                                                 input, output, output_max_len );
+#endif
 
 #if defined(POLARSSL_PKCS1_V21)
         case RSA_PKCS_V21:
@@ -863,6 +871,7 @@
 }
 #endif /* POLARSSL_PKCS1_V21 */
 
+#if defined(POLARSSL_PKCS1_V15)
 /*
  * Implementation of the PKCS#1 v2.1 RSASSA-PKCS1-V1_5-SIGN function
  */
@@ -948,6 +957,7 @@
             ? rsa_public(  ctx, sig, sig )
             : rsa_private( ctx, f_rng, p_rng, sig, sig ) );
 }
+#endif /* POLARSSL_PKCS1_V15 */
 
 /*
  * Do an RSA operation to sign the message digest
@@ -963,9 +973,11 @@
 {
     switch( ctx->padding )
     {
+#if defined(POLARSSL_PKCS1_V15)
         case RSA_PKCS_V15:
             return rsa_rsassa_pkcs1_v15_sign( ctx, f_rng, p_rng, mode, md_alg,
                                               hashlen, hash, sig );
+#endif
 
 #if defined(POLARSSL_PKCS1_V21)
         case RSA_PKCS_V21:
@@ -1091,6 +1103,7 @@
 }
 #endif /* POLARSSL_PKCS1_V21 */
 
+#if defined(POLARSSL_PKCS1_V15)
 /*
  * Implementation of the PKCS#1 v2.1 RSASSA-PKCS1-v1_5-VERIFY function
  */
@@ -1206,6 +1219,7 @@
 
     return( 0 );
 }
+#endif /* POLARSSL_PKCS1_V15 */
 
 /*
  * Do an RSA operation and check the message digest
@@ -1221,9 +1235,11 @@
 {
     switch( ctx->padding )
     {
+#if defined(POLARSSL_PKCS1_V15)
         case RSA_PKCS_V15:
             return rsa_rsassa_pkcs1_v15_verify( ctx, f_rng, p_rng, mode, md_alg,
                                                 hashlen, hash, sig );
+#endif
 
 #if defined(POLARSSL_PKCS1_V21)
         case RSA_PKCS_V21:
@@ -1339,6 +1355,7 @@
 #define RSA_PT  "\xAA\xBB\xCC\x03\x02\x01\x00\xFF\xFF\xFF\xFF\xFF" \
                 "\x11\x22\x33\x0A\x0B\x0C\xCC\xDD\xDD\xDD\xDD\xDD"
 
+#if defined(POLARSSL_PCKS1_V15)
 static int myrand( void *rng_state, unsigned char *output, size_t len )
 {
     size_t i;
@@ -1348,15 +1365,17 @@
 
     for( i = 0; i < len; ++i )
         output[i] = rand();
-    
+
     return( 0 );
 }
+#endif
 
 /*
  * Checkup routine
  */
 int rsa_self_test( int verbose )
 {
+#if defined(POLARSSL_PCKS1_V15)
     size_t len;
     rsa_context rsa;
     unsigned char rsa_plaintext[PT_LEN];
@@ -1457,7 +1476,10 @@
 #endif /* POLARSSL_SHA1_C */
 
     rsa_free( &rsa );
-
+#else /* POLARSSL_PKCS1_V15 */
+    if( verbose != 0 )
+        printf( "skipper\n\n" );
+#endif /* POLARSSL_PKCS1_V15 */
     return( 0 );
 }
 
