--- xrelayd.c
+++ xrelayd.c
@@ -62,6 +62,10 @@
 #include <polarssl/x509.h>
 #include <polarssl/ssl.h>
 #include <polarssl/net.h>
+#include <polarssl/version.h>
+#if POLARSSL_VERSION_NUMBER >= 0x01020000
+#include <polarssl/ssl_cache.h>
+#endif
 
 // FIXME. implement some sort of DDOS prevention
 #define MAXCONNCOUNT 16
@@ -91,6 +95,7 @@
  */
 int xrly_ciphers[] =
 {
+#if POLARSSL_VERSION_NUMBER < 0x01020000
 #if defined(POLARSSL_AES_C)
     SSL_RSA_AES_128_SHA,
     SSL_RSA_AES_256_SHA,
@@ -102,6 +107,19 @@
     SSL_RSA_RC4_128_SHA,
     SSL_RSA_RC4_128_MD5,
 #endif
+#else
+#if defined(POLARSSL_AES_C)
+    TLS_RSA_WITH_AES_128_CBC_SHA,
+    TLS_RSA_WITH_AES_256_CBC_SHA,
+#endif
+#if defined(POLARSSL_DES_C)
+    TLS_RSA_WITH_3DES_EDE_CBC_SHA,
+#endif
+#if defined(POLARSSL_ARC4_C)
+    TLS_RSA_WITH_RC4_128_SHA,
+    TLS_RSA_WITH_RC4_128_MD5,
+#endif
+#endif
     0
 };
 
@@ -268,6 +286,7 @@
 ssl_session *s_list_1st = NULL;
 ssl_session *cur, *prv;
 
+#if POLARSSL_VERSION_NUMBER < 0x01020000
 static int my_get_session( ssl_context *ssl )
 {
     time_t t = time( NULL );
@@ -334,6 +353,7 @@
 
     return( 0 );
 }
+#endif
 
 inline int proxy_send_all( int (*f_send)(void *, const unsigned char *, size_t),
                            void *ctx, unsigned char *buf, int len, int *eof)
@@ -412,9 +432,15 @@
     }
     
     /* session caching */
+#if POLARSSL_VERSION_NUMBER < 0x01020000
     ssl_session ssn;
     ssl_set_scb( &ssl, my_get_session, my_set_session );
     ssl_set_session( &ssl, 1, 0, &ssn );
+#else
+    ssl_cache_context cache;
+    ssl_cache_init( &cache );
+    ssl_set_session_cache( &ssl, ssl_cache_get, &cache, ssl_cache_set, &cache );
+#endif
     
     ILOG("Initialized SSL for %s mode",sslserver ? "server" : "client");
     
