diff --git a/.waf-tools/openssl.py b/.waf-tools/openssl.py
index 7f599a9..4a5c01f 100644
--- a/.waf-tools/openssl.py
+++ b/.waf-tools/openssl.py
@@ -5,16 +5,16 @@
 
 When using this tool, the wscript will look like:
 
-	def options(opt):
-	        opt.tool_options('openssl')
+    def options(opt):
+        opt.tool_options('openssl')
 
-	def configure(conf):
-		conf.load('compiler_c openssl')
+    def configure(conf):
+        conf.load('compiler_c openssl')
 
-                conf.check_openssl()
+        conf.check_openssl()
 
-	def build(bld):
-		bld(source='main.cpp', target='app', use='OPENSSL')
+    def build(bld):
+        bld(source='main.cpp', target='app', use='OPENSSL')
 
 '''
 
@@ -23,37 +23,38 @@
 
 @conf
 def check_openssl(self,*k,**kw):
-        root = k and k[0] or kw.get('path',None) or Options.options.with_openssl
-        mandatory = kw.get('mandatory', True)
-        var = kw.get('var', 'OPENSSL')
+    root = k and k[0] or kw.get('path',None) or Options.options.with_openssl
+    mandatory = kw.get('mandatory', True)
+    var = kw.get('var', 'OPENSSL')
 
-        CODE = """
+    CODE = """
 #include <openssl/crypto.h>
 #include <stdio.h>
 
 int main(int argc, char **argv) {
-	(void)argc;
-        printf ("%s", argv[0]);
+    (void)argc;
+    printf("%s", argv[0]);
 
-	return 0;
+    return 0;
 }
 """
-        if root:
-                libcrypto = self.check_cc (lib=['ssl', 'crypto'],
-                                           header_name='openssl/crypto.h',
-                                           define_name='HAVE_%s' % var,
-                                           uselib_store=var,
-                                           mandatory = mandatory,
-                                           cflags="-I%s/include" % root,
-                                           linkflags="-L%s/lib" % root,
-                                           execute = True, fragment = CODE, define_ret = True)
-        else:
-                libcrypto = self.check_cc (lib=['ssl', 'crypto'],
-                                           header_name='openssl/crypto.h',
-                                           define_name='HAVE_%s' % var,
-                                           uselib_store=var,
-                                           mandatory = mandatory,
-                                           execute = True, fragment = CODE, define_ret = True)
+    if root:
+        libcrypto = self.check_cxx(lib=['ssl', 'crypto'],
+                       msg='Checking for OpenSSL library',
+                       define_name='HAVE_%s' % var,
+                       uselib_store=var,
+                       mandatory=mandatory,
+                       cflags="-I%s/include" % root,
+                       linkflags="-L%s/lib" % root,
+                       fragment=CODE)
+    else:
+        libcrypto = self.check_cxx(lib=['ssl', 'crypto'],
+                       msg='Checking for OpenSSL library',
+                       define_name='HAVE_%s' % var,
+                       uselib_store=var,
+                       mandatory=mandatory,
+                       fragment=CODE)
 
 def options(opt):
-        opt.add_option('--with-openssl',type='string',default='',dest='with_openssl',help='''Path to OpenSSL''')
+    opt.add_option('--with-openssl', type='string', default='',
+                   dest='with_openssl', help='''Path to OpenSSL''')
