diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index ecaefb7..b21e44b 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -1332,7 +1332,7 @@
             return( POLARSSL_ERR_SSL_CA_CHAIN_REQUIRED );
         }
 
-        ret = x509parse_verify( ssl->peer_cert, ssl->ca_chain,
+        ret = x509parse_verify( ssl->peer_cert, ssl->ca_chain, ssl->ca_crl,
                                 ssl->peer_cn,  &ssl->verify_result );
 
         if( ret != 0 )
@@ -1702,9 +1702,10 @@
 }
 
 void ssl_set_ca_chain( ssl_context *ssl, x509_cert *ca_chain,
-                       char *peer_cn )
+                       x509_crl *ca_crl, char *peer_cn )
 {
     ssl->ca_chain   = ca_chain;
+    ssl->ca_crl     = ca_crl;
     ssl->peer_cn    = peer_cn;
 }
 
@@ -1740,10 +1741,12 @@
         return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
 
     ssl->hostname_len = strlen( hostname );
-    ssl->hostname = (unsigned char *) malloc( ssl->hostname_len );
+    ssl->hostname = (unsigned char *) malloc( ssl->hostname_len + 1 );
 
     memcpy( ssl->hostname, (unsigned char *) hostname,
             ssl->hostname_len );
+    
+    ssl->hostname[ssl->hostname_len] = '\0';
 
     return( 0 );
 }
diff --git a/library/x509parse.c b/library/x509parse.c
index de9abe3..79bb0a6 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -2068,9 +2068,9 @@
 }
 
 /*
- * Return 0 if the certificate is still valid, or BADCERT_EXPIRED
+ * Return 0 if the x509_time is still valid, or 1 otherwise.
  */
-int x509parse_expired( x509_cert *crt )
+int x509parse_time_expired( x509_time *to )
 {
     struct tm *lt;
     time_t tt;
@@ -2078,17 +2078,38 @@
     tt = time( NULL );
     lt = localtime( &tt );
 
-    if( lt->tm_year  > crt->valid_to.year - 1900 )
-        return( BADCERT_EXPIRED );
+    if( lt->tm_year  > to->year - 1900 )
+        return( 1 );
 
-    if( lt->tm_year == crt->valid_to.year - 1900 &&
-        lt->tm_mon   > crt->valid_to.mon  - 1 )
-        return( BADCERT_EXPIRED );
+    if( lt->tm_year == to->year - 1900 &&
+        lt->tm_mon   > to->mon  - 1 )
+        return( 1 );
 
-    if( lt->tm_year == crt->valid_to.year - 1900 &&
-        lt->tm_mon  == crt->valid_to.mon  - 1    &&
-        lt->tm_mday  > crt->valid_to.day )
-        return( BADCERT_EXPIRED );
+    if( lt->tm_year == to->year - 1900 &&
+        lt->tm_mon  == to->mon  - 1    &&
+        lt->tm_mday  > to->day )
+        return( 1 );
+
+    return( 0 );
+}
+
+/*
+ * Return 1 if the certificate is revoked, or 0 otherwise.
+ */
+int x509parse_revoked( x509_cert *crt, x509_crl *crl )
+{
+    x509_crl_entry *cur = &crl->entry;
+
+    while( cur != NULL && cur->serial.len != 0 )
+    {
+        if( memcmp( crt->serial.p, cur->serial.p, crt->serial.len ) == 0 )
+        {
+            if( x509parse_time_expired( &cur->revocation_date ) )
+                return( 1 );
+        }
+
+        cur = cur->next;
+    }
 
     return( 0 );
 }
@@ -2125,6 +2146,7 @@
  */
 int x509parse_verify( x509_cert *crt,
                       x509_cert *trust_ca,
+                      x509_crl *ca_crl,
                       char *cn, int *flags )
 {
     int cn_len;
@@ -2134,7 +2156,10 @@
     x509_name *name;
     unsigned char hash[64];
 
-    *flags = x509parse_expired( crt );
+    *flags = 0;
+
+    if( x509parse_time_expired( &crt->valid_to ) )
+        *flags = BADCERT_EXPIRED;
 
     if( cn != NULL )
     {
@@ -2224,6 +2249,61 @@
         trust_ca = trust_ca->next;
     }
 
+    /*
+     * TODO: What happens if no CRL is present?
+     * Suggestion: Revocation state should be unknown if no CRL is present.
+     * For backwards compatibility this is not yet implemented.
+     */
+
+    /*
+     * Check if the topmost certificate is revoked if the trusted CA is
+     * determined.
+     */
+    while( trust_ca != NULL && ca_crl != NULL && ca_crl->version != 0 )
+    {
+        if( ca_crl->issuer_raw.len != trust_ca->subject_raw.len ||
+            memcmp( ca_crl->issuer_raw.p, trust_ca->subject_raw.p,
+                    ca_crl->issuer_raw.len ) != 0 )
+        {
+            ca_crl = ca_crl->next;
+            continue;
+        }
+
+        /*
+         * Check if CRL is correctry signed by the trusted CA
+         */
+        hash_id = ca_crl->sig_oid1.p[8];
+
+        x509_hash( ca_crl->tbs.p, ca_crl->tbs.len, hash_id, hash );
+
+        if( !rsa_pkcs1_verify( &trust_ca->rsa, RSA_PUBLIC, hash_id,
+                              0, hash, ca_crl->sig.p ) == 0 )
+        {
+            /*
+             * CRL is not trusted
+             */
+            *flags |= BADCRL_NOT_TRUSTED;
+            break;
+        }
+
+        /*
+         * Check for validity of CRL (Do not drop out)
+         */
+        if( x509parse_time_expired( &ca_crl->next_update ) )
+            *flags |= BADCRL_EXPIRED;
+        
+        /*
+         * Check if certificate is revoked
+         */
+        if( x509parse_revoked(crt, ca_crl) )
+        {
+            *flags |= BADCERT_REVOKED;
+            break;
+        }
+
+        ca_crl = ca_crl->next;
+    }
+
     if( *flags != 0 )
         return( POLARSSL_ERR_X509_CERT_VERIFY_FAILED );
 
@@ -2406,7 +2486,7 @@
     if( verbose != 0 )
         printf( "passed\n  X.509 signature verify: ");
 
-    ret = x509parse_verify( &clicert, &cacert, "Joe User", &i );
+    ret = x509parse_verify( &clicert, &cacert, NULL, "Joe User", &i );
     if( ret != 0 )
     {
         if( verbose != 0 )
