crd->c_cert = NULL;
     }
     if (crd->c_cert_ext) {
-        X509_EXTENSION_free(crd->c_cert_ext);
+        sk_X509_EXTENSION_pop_free(crd->c_cert_ext, X509_EXTENSION_free);
         crd->c_cert_ext = NULL;
     }
     if (crd->c_cert_chain) {
 
     if (!cred)
         return set_error(cc, EINVAL, POSIX_ERROR, "Cred. handler"
-                " not initialized" );
-    
-    if (crd->c_cert_ext) {
-        X509_EXTENSION_free(crd->c_cert_ext);
-        crd->c_cert_ext = NULL;
-    }
-    
-    crd->c_cert_ext = X509_EXTENSION_dup(cert_ext);
+                " not initialized" ); 
+
+    if (!crd->c_cert_ext)
+       crd->c_cert_ext = sk_X509_EXTENSION_new_null();
+    sk_X509_EXTENSION_push(crd->c_cert_ext, cert_ext);
     return 0;
 }