diff --git a/include/mysqli.php b/include/mysqli.php
index 43b15067f444b49b0b4411fcb609ef7c6b8851c0..430d0f75e219bc7cfabcd8f8e84b01c50253aece 100644
--- a/include/mysqli.php
+++ b/include/mysqli.php
@@ -22,22 +22,24 @@ function db_connect($host, $user, $passwd, $options) {
     global $__db;
 
     //Assert
-    if(!strlen($user) || !strlen($passwd) || !strlen($host))
+    if(!strlen($user) || !strlen($host))
         return NULL;
 
     if (!($__db = mysqli_init()))
         return NULL;
 
     // Setup SSL if enabled
-    if (isset($options['certs']))
-        $__db->set_ssl(
-                $options['certs']['key'],
-                $options['certs']['cert'],
-                $options['certs']['ca'],
+    if (isset($options['ssl']))
+        $__db->ssl_set(
+                $options['ssl']['key'],
+                $options['ssl']['cert'],
+                $options['ssl']['ca'],
                 null, null);
+    elseif(!$passwd)
+        return NULL;
 
     //Connectr
-    if(!$__db->real_connect($host, $user, $passwd))
+    if(!@$__db->real_connect($host, $user, $passwd))
         return NULL;
 
     //Select the database, if any.
@@ -214,6 +216,11 @@ function db_input($var, $quote=true) {
     return db_real_escape($var, $quote);
 }
 
+function db_connect_error() {
+    global $__db;
+    return $__db->connect_error;
+}
+
 function db_error() {
     global $__db;
     return $__db->error;
diff --git a/main.inc.php b/main.inc.php
index 4b5ddd99034455e06ff0ea6a9dc8e06b6242ba70..819ae4345e3f8d4c6a92f21ff3a229acc507ca0a 100644
--- a/main.inc.php
+++ b/main.inc.php
@@ -195,12 +195,13 @@
     $ferror=null;
     $options = array();
     if (defined('DBSSLCA'))
-        $options['certs'] = array(
+        $options['ssl'] = array(
             'ca' => DBSSLCA,
             'cert' => DBSSLCERT,
             'key' => DBSSLKEY
         );
-    if (!db_connect(DBHOST,DBUSER,DBPASS, $options)
+
+    if (!db_connect(DBHOST, DBUSER, DBPASS, $options)
             || !db_select_database(DBNAME)) {
         $ferror='Unable to connect to the database';
     } elseif(!($ost=osTicket::start(1)) || !($cfg = $ost->getConfig())) {
diff --git a/setup/inc/class.installer.php b/setup/inc/class.installer.php
index 21ac30f9b087475c2764b45b0c594deb094a664b..043f68d8abc9ea8c84c2d0255ce780c0a4389a7f 100644
--- a/setup/inc/class.installer.php
+++ b/setup/inc/class.installer.php
@@ -44,7 +44,7 @@ class Installer extends SetupWizard {
     function install($vars) {
 
         $this->errors=$f=array();
-        
+
         $f['name']          = array('type'=>'string',   'required'=>1, 'error'=>'Name required');
         $f['email']         = array('type'=>'email',    'required'=>1, 'error'=>'Valid email required');
         $f['fname']         = array('type'=>'string',   'required'=>1, 'error'=>'First name required');
@@ -58,7 +58,7 @@ class Installer extends SetupWizard {
         $f['dbname']        = array('type'=>'string',   'required'=>1, 'error'=>'Database name required');
         $f['dbuser']        = array('type'=>'string',   'required'=>1, 'error'=>'Username required');
         $f['dbpass']        = array('type'=>'string',   'required'=>1, 'error'=>'password required');
-        
+
 
         if(!Validator::process($f,$vars,$this->errors) && !$this->errors['err'])
             $this->errors['err']='Missing or invalid data - correct the errors and try again.';
@@ -67,14 +67,14 @@ class Installer extends SetupWizard {
         //Staff's email can't be same as system emails.
         if($vars['admin_email'] && $vars['email'] && !strcasecmp($vars['admin_email'],$vars['email']))
             $this->errors['admin_email']='Conflicts with system email above';
-        //Admin's pass confirmation. 
+        //Admin's pass confirmation.
         if(!$this->errors && strcasecmp($vars['passwd'],$vars['passwd2']))
             $this->errors['passwd2']='passwords to not match!';
         //Check table prefix underscore required at the end!
         if($vars['prefix'] && substr($vars['prefix'], -1)!='_')
             $this->errors['prefix']='Bad prefix. Must have underscore (_) at the end. e.g \'ost_\'';
 
-        //Make sure admin username is not very predictable. XXX: feels dirty but necessary 
+        //Make sure admin username is not very predictable. XXX: feels dirty but necessary
         if(!$this->errors['username'] && in_array(strtolower($vars['username']),array('admin','admins','username','osticket')))
             $this->errors['username']='Bad username';
 
@@ -123,7 +123,7 @@ class Installer extends SetupWizard {
             $this->errors['err']='Unable to open config file for writing. Permission denied! (#3)';
         elseif(!$this->load_sql_file($schemaFile,$vars['prefix'], true, $debug))
             $this->errors['err']='Error parsing SQL schema! Get help from developers (#4)';
-              
+
         if(!$this->errors) {
             //Create admin user.
             $sql='INSERT INTO '.PREFIX.'staff SET created=NOW() '
@@ -178,7 +178,7 @@ class Installer extends SetupWizard {
                 .",(2,1,'osTicket Alerts','alerts@$domain',NOW(),NOW())"
                 .",(3,1,'','noreply@$domain',NOW(),NOW())";
         @mysql_query($sql);
-                   
+
         //Create a ticket to make the system warm and happy.
         $sql='INSERT INTO '.PREFIX.'ticket SET created=NOW(), status="open", source="Web" '
             .' ,priority_id=2, dept_id=1, topic_id=1 '
@@ -189,7 +189,7 @@ class Installer extends SetupWizard {
         if(mysql_query($sql) && ($tid=mysql_insert_id())) {
             if(!($msg=file_get_contents(INC_DIR.'msg/installed.txt')))
                 $msg='Congratulations and Thank you for choosing osTicket!';
-                        
+
             $sql='INSERT INTO '.PREFIX.'ticket_thread SET created=NOW()'
                 .', source="Web" '
                 .', thread_type="M" '
@@ -199,7 +199,7 @@ class Installer extends SetupWizard {
             @mysql_query($sql);
         }
         //TODO: create another personalized ticket and assign to admin??
-                    
+
         //Log a message.
         $msg="Congratulations osTicket basic installation completed!\n\nThank you for choosing osTicket!";
         $sql='INSERT INTO '.PREFIX.'syslog SET created=NOW(), updated=NOW(), log_type="Debug" '
diff --git a/setup/setup.inc.php b/setup/setup.inc.php
index e2f5620f7226af5d8d3c4aa0c55f3576d51eefd9..aa8b67c0495e52377698ee1d18aac4405499d8e9 100644
--- a/setup/setup.inc.php
+++ b/setup/setup.inc.php
@@ -66,5 +66,10 @@ require_once(INCLUDE_DIR.'class.validator.php');
 require_once(INCLUDE_DIR.'class.passwd.php');
 require_once(INCLUDE_DIR.'class.format.php');
 require_once(INCLUDE_DIR.'class.misc.php');
-require_once(INCLUDE_DIR.'mysql.php');
+
+if (extension_loaded('mysqli'))
+    require_once INCLUDE_DIR.'mysqli.php';
+else
+    require(INCLUDE_DIR.'mysql.php');
+
 ?>