diff --git a/system/database/autoload.php b/system/database/autoload.php
index aa9270a..1da6f69 100644
--- a/system/database/autoload.php
+++ b/system/database/autoload.php
@@ -7,18 +7,167 @@
  */
 
  
+namespace Phacil\Framework;
 
-if(!defined('DIR_DATABASE'))
-    define('DIR_DATABASE', (__DIR__)."/");
+final class Database {
+	/**
+	 * 
+	 * @var object
+	 */
+	private $driver;
+	
+	/**
+	 * 
+	 * @var string
+	 */
+	private $cachePrefix = "SQL_";
+	
+	/**
+	 * @param string $driver 
+	 * @param string $hostname 
+	 * @param string $username 
+	 * @param string $password 
+	 * @param string $database 
+	 * @return void 
+	 */
+	public function __construct($driver, $hostname, $username, $password, $database) {
 
-include DIR_DATABASE."/library/db.php";
+        $driverClass = "\\Phacil\\Framework\\Databases\\".$driver;
 
-use Phacil\Framework;
+		try {
+            $this->driver = new $driverClass($hostname, $username, $password, $database);
+        } catch (Exception $th) {
+            throw new Exception('Error: Could not load database file ' . $driver . '!');
+            //exit('Error: Could not load database file ' . $driver . '!');
+        }		
+		
+	}
+		
+  	/**
+  	 * @param string $sql 
+  	 * @param bool $cacheUse 
+  	 * @return object|\Phacil\Framework\DB::Cache 
+  	 * @throws PhpfastcacheInvalidArgumentException 
+  	 */
+  	public function query($sql, $cacheUse = true) {
+		
+		if(defined('SQL_CACHE') && SQL_CACHE == true && $cacheUse == true) {
+			
+			return $this->Cache($sql);
+			
+		} else {
+			
+			return $this->driver->query($sql);
+		}		
+		
+  	}
+	
+	/**
+	 * @param string $value 
+	 * @return mixed 
+	 */
+	public function escape($value) {
+		return $this->driver->escape($value);
+	}
+	
+  	/** @return int  */
+  	public function countAffected() {
+		return $this->driver->countAffected();
+  	}
 
-if(defined('DB_DRIVER')) {
+  	/** @return mixed  */
+  	public function getLastId() {
+		return $this->driver->getLastId();
+  	}
+
+    /**
+     * @param string $sql 
+     * @param int $pageNum_exibe 
+     * @param int $maxRows_exibe 
+     * @param bool $cache 
+     * @param mixed|null $sqlTotal 
+     * @return object 
+     * @throws PhpfastcacheInvalidArgumentException 
+     */
+    public function pagination($sql, $pageNum_exibe = 1, $maxRows_exibe = 10, $cache = true, $sqlTotal = null){
+
+        if (($pageNum_exibe >= 1)) {
+            $pageNum_exibe = $pageNum_exibe-1;
+        }
+        $startRow_exibe = $pageNum_exibe * $maxRows_exibe;
+
+        $query_exibe = $sql;
+
+        $query_limit_exibe = sprintf("%s LIMIT %d, %d", $query_exibe, $startRow_exibe, $maxRows_exibe);
+
+        $exibe = $this->query($query_limit_exibe, $cache);
+
+        $re = '/^(SELECT \*)/i';
+
+        $all_exibe_query = ($sqlTotal != null) ? $sqlTotal : ((preg_match($re, $query_exibe)) ? preg_replace($re, "SELECT COUNT(*) as __TOTALdeREG_DB_Pagination", $query_exibe) : $query_exibe);
+
+        $all_exibe = $this->query($all_exibe_query, $cache);
+        $totalRows_exibe = (isset($all_exibe->row['__TOTALdeREG_DB_Pagination'])) ? $all_exibe->row['__TOTALdeREG_DB_Pagination'] : $all_exibe->num_rows;
+
+        if($totalRows_exibe <= 0){
+            $all_exibe_query = $query_exibe;
+            $all_exibe = $this->query($all_exibe_query, $cache);
+            $totalRows_exibe = (isset($all_exibe->row['__TOTALdeREG_DB_Pagination'])) ? $all_exibe->row['__TOTALdeREG_DB_Pagination'] : $all_exibe->num_rows;
+        }
+
+        $totalPages_exibe = ceil($totalRows_exibe/$maxRows_exibe);
+
+        $exibe->totalPages_exibe = $totalPages_exibe;
+        $exibe->totalRows_exibe = $totalRows_exibe;
+        $exibe->pageNum_exibe = $pageNum_exibe+1;
+
+        return $exibe;
+    }
+	
+	/**
+	 * @param string $sql 
+	 * @return object 
+	 * @throws PhpfastcacheInvalidArgumentException 
+	 */
+	private function Cache($sql) {
+		if(class_exists('Caches')) {
+			$cache = new Caches();
+		
+			if (stripos($sql, "select") !== false) {
+
+				if($cache->check($this->cachePrefix.md5($sql))) {
+					
+					return $cache->get($this->cachePrefix.md5($sql));
+					
+				} else {
+					$cache->set($this->cachePrefix.md5($sql), $this->driver->query($sql));
+
+					return $this->driver->query($sql);
+				}
+			} else {
+				return $this->driver->query($sql);
+			}
+		} else {
+			return $this->driver->query($sql);
+		}
+	}
+
+	/**
+	 * @param string $nome 
+	 * @param object $object 
+	 * @return void 
+	 */
+	public function createSubBase($nome, $object) {
+
+        $this->$nome = $object;
+    }
+}
+
+
+/* if(defined('DB_DRIVER')) {
     global $db;
     $db = new Phacil\Framework\DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
 } else {
     global $db;
     $db = new Phacil\Framework\DB('nullStatement', NULL, NULL, NULL, NULL);
-}
+} */
diff --git a/system/database/database/dbmysqli.php b/system/database/database/dbmysqli.php
deleted file mode 100644
index 30cc6e2..0000000
--- a/system/database/database/dbmysqli.php
+++ /dev/null
@@ -1,51 +0,0 @@
-connection = new \mysqli($hostname, $username, $password, $database, $port);
-		if ($this->connection->connect_error) {
-			throw new \Exception('Error: ' . $this->connection->error . '
Error No: ' . $this->connection->errno);
-		}
-		$this->connection->set_charset($charset);
-		$this->connection->query("SET SQL_MODE = ''");
-	}
-	public function query($sql) {
-		$query = $this->connection->query($sql);
-		if (!$this->connection->errno) {
-			if ($query instanceof \mysqli_result) {
-				$data = array();
-				while ($row = $query->fetch_assoc()) {
-					$data[] = $row;
-				}
-				$result = new \stdClass();
-				$result->num_rows = $query->num_rows;
-				$result->row = isset($data[0]) ? $data[0] : array();
-				$result->rows = $data;
-				$query->close();
-				return $result;
-			} else {
-				return true;
-			}
-		} else {
-			throw new \Exception('Error: ' . $this->connection->error  . '
Error No: ' . $this->connection->errno . '
' . $sql);
-		}
-	}
-	public function escape($value) {
-		return $this->connection->real_escape_string($value);
-	}
-	
-	public function countAffected() {
-		return $this->connection->affected_rows;
-	}
-	public function getLastId() {
-		return $this->connection->insert_id;
-	}
-	
-	public function isConnected() {
-		return $this->connection->ping();
-	}
-	
-	public function __destruct() {
-		$this->connection->close();
-	}
-}
diff --git a/system/database/databases/dbmysqli.php b/system/database/databases/dbmysqli.php
new file mode 100644
index 0000000..151c0ca
--- /dev/null
+++ b/system/database/databases/dbmysqli.php
@@ -0,0 +1,13 @@
+connection = null;
+		unset($this->connection);
 	}
 }
\ No newline at end of file
diff --git a/system/database/database/mssql.php b/system/database/databases/mssql.php
similarity index 79%
rename from system/database/database/mssql.php
rename to system/database/databases/mssql.php
index 4c83f7a..b557417 100644
--- a/system/database/database/mssql.php
+++ b/system/database/databases/mssql.php
@@ -1,4 +1,18 @@
 connection);
 	}
 }
-?>
\ No newline at end of file
diff --git a/system/database/databases/mysql.php b/system/database/databases/mysql.php
new file mode 100644
index 0000000..c5410cc
--- /dev/null
+++ b/system/database/databases/mysql.php
@@ -0,0 +1,18 @@
+connection);
 	}
 }
-?>
\ No newline at end of file
diff --git a/system/database/database/db_pdo.php b/system/database/databases/mysql_pdo.php
similarity index 83%
rename from system/database/database/db_pdo.php
rename to system/database/databases/mysql_pdo.php
index ac52a85..4674e2a 100644
--- a/system/database/database/db_pdo.php
+++ b/system/database/databases/mysql_pdo.php
@@ -1,13 +1,14 @@
  PDO::ERRMODE_SILENT
+        'PDO::ATTR_ERRMODE' => \PDO::ERRMODE_SILENT
     );
     /**
      * The number of rows affected by the last operation
@@ -46,7 +47,7 @@ final class DB_PDO
      */
     public function __construct($host, $user, $pass, $name, $port = '3306', $charset = 'utf8mb4')
     {
-        $this->params = new stdClass;
+        $this->params = new \stdClass;
         # keep connection data
         $this->params->host    = $host;
         $this->params->user    = $user;
@@ -64,11 +65,11 @@ final class DB_PDO
     public function connect()
     {
         try {
-            $this->dbh = new PDO($this->params->connstr, $this->params->user, $this->params->pass, $this->options);
+            $this->dbh = new \PDO($this->params->connstr, $this->params->user, $this->params->pass, $this->options);
             if (version_compare(PHP_VERSION, '5.3.6', '<=')) {
                 $this->dbh->exec($this->options['PDO::MYSQL_ATTR_INIT_COMMAND']);
             }
-        } catch (PDOException $exception) {
+        } catch (\PDOException $exception) {
             trigger_error($exception->getMessage());
         }
     }
@@ -81,7 +82,7 @@ final class DB_PDO
     public function query($sql = null)
     {
         if ($this->dbh) {
-            $data = new stdClass;
+            $data = new \stdClass;
 			
 			$sth=$this->dbh->prepare($sql);
 			$sth->execute();
@@ -129,7 +130,7 @@ final class DB_PDO
      */
     public function getDriverName()
     {
-        return $this->dbh ? $this->dbh->getAttribute(PDO::ATTR_DRIVER_NAME) : null;
+        return $this->dbh ? $this->dbh->getAttribute(\PDO::ATTR_DRIVER_NAME) : null;
     }
     /**
      * Get information about the version of the client libraries that are used by the PDO driver
@@ -138,7 +139,7 @@ final class DB_PDO
      */
     public function getVersion()
     {
-        return $this->dbh ? $this->dbh->getAttribute(PDO::ATTR_CLIENT_VERSION) : null;
+        return $this->dbh ? $this->dbh->getAttribute(\PDO::ATTR_CLIENT_VERSION) : null;
     }
     /**
      * Closing a database connection
diff --git a/system/database/databases/mysqli.php b/system/database/databases/mysqli.php
new file mode 100644
index 0000000..74baa80
--- /dev/null
+++ b/system/database/databases/mysqli.php
@@ -0,0 +1,117 @@
+connection = @new \MySQLi($hostname, $username, $password, $database, $port);
+		} catch (\mysqli_sql_exception $e) {
+			throw new \Exception('Error: ' . $this->connection->error . '
Error No: ' . $this->connection->errno);
+		}
+
+		if (!$this->connection->connect_errno) {
+			$this->connection->report_mode = MYSQLI_REPORT_ERROR;
+			$this->connection->set_charset($charset);
+			//$this->connection->query("SET SESSION sql_mode = 'NO_ZERO_IN_DATE,NO_ENGINE_SUBSTITUTION'");
+			$this->connection->query("SET SQL_MODE = ''");
+		} else {
+			throw new \Exception('Error: Could not make a database link using ' . $username . '@' . $hostname . '!');
+		}
+
+	}
+	
+	/**
+	 * Execute the SQL Query.
+	 * 
+	 * @param string $sql 
+	 * @return stdClass|true 
+	 * @throws Exception 
+	 */
+	public function query($sql) {
+		$query = $this->connection->query($sql);
+		if (!$this->connection->errno) {
+			if ($query instanceof \mysqli_result) {
+				$data = array();
+				while ($row = $query->fetch_assoc()) {
+					$data[] = $row;
+				}
+				$result = new \stdClass();
+				$result->num_rows = $query->num_rows;
+				$result->row = isset($data[0]) ? $data[0] : array();
+				$result->rows = $data;
+				$query->close();
+				return $result;
+			} else {
+				return true;
+			}
+		} else {
+			throw new \Exception('Error: ' . $this->connection->error  . '
Error No: ' . $this->connection->errno . '
' . $sql);
+		}
+	}
+	
+	/**
+	 * Important escape to prevent SQL injection.
+	 * 
+	 * @param string $value 
+	 * @return string 
+	 */
+	public function escape($value) {
+		return $this->connection->real_escape_string($value);
+	}
+	
+	/** 
+	 * Number of affected rows
+	 * 
+	 * @return int  */
+	public function countAffected() {
+		return $this->connection->affected_rows;
+	}
+
+	/** @return int|string  */
+	public function getLastId() {
+		return $this->connection->insert_id;
+	}
+	
+	/** @return bool  */
+	public function isConnected() {
+		return $this->connection->ping();
+	}
+	
+	/** @return void  */
+	public function __destruct() {
+		$this->connection->close();
+	}
+}
diff --git a/system/database/database/nullStatement.php b/system/database/databases/nullStatement.php
similarity index 60%
rename from system/database/database/nullStatement.php
rename to system/database/databases/nullStatement.php
index 4b85126..0cd6f7b 100644
--- a/system/database/database/nullStatement.php
+++ b/system/database/databases/nullStatement.php
@@ -1,9 +1,23 @@
 connection = NULL;
+        //$this->connection = NULL;
     }
 
     public function query($sql) {
@@ -30,4 +44,3 @@ final class nullStatement {
         return NULL;
     }
 }
-?>
\ No newline at end of file
diff --git a/system/database/database/oracle.php b/system/database/databases/oracle.php
similarity index 62%
rename from system/database/database/oracle.php
rename to system/database/databases/oracle.php
index b53ddf9..8138684 100644
--- a/system/database/database/oracle.php
+++ b/system/database/databases/oracle.php
@@ -1,8 +1,39 @@
 connection = oci_connect($username, $password, $hostname."/".$database, $charset);
         if (!$this->connection) {
@@ -11,10 +42,16 @@ final class Oracle{
             throw new \Exception(trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR));
         }
         oci_set_client_info($this->connection, "Administrator");
-        oci_set_module_name($this->connection, $module);
-        oci_set_client_identifier($this->connection, $cid);
+        //oci_set_module_name($this->connection, $module);
+        //oci_set_client_identifier($this->connection, $cid);
 
 	}
+	
+	/**
+	 * @param string $sql 
+	 * @return stdClass 
+	 * @throws Exception 
+	 */
 	public function query($sql) {
         $stid = oci_parse($this->connection, $sql);
         oci_execute($stid);
@@ -33,6 +70,7 @@ final class Oracle{
 			throw new \Exception('Error: ' . oci_error()   . '
' . $sql);
 		}
 	}
+	
 	public function escape($value) {
 		return str_replace("'", "", $value);
 	}
diff --git a/system/database/database/postgre.php b/system/database/databases/postgre.php
similarity index 67%
rename from system/database/database/postgre.php
rename to system/database/databases/postgre.php
index 61d05ad..ac9e5f6 100644
--- a/system/database/database/postgre.php
+++ b/system/database/databases/postgre.php
@@ -1,6 +1,31 @@
 link = pg_connect('host=' . $hostname . ' port=' . $port .  ' user=' . $username . ' password='	. $password . ' dbname=' . $database)) {
 			throw new \Exception('Error: Could not make a database link using ' . $username . '@' . $hostname);
@@ -10,6 +35,12 @@ final class Postgre {
 		}
 		pg_query($this->link, "SET CLIENT_ENCODING TO '".$charset."'");
 	}
+
+	/**
+	 * @param string $sql 
+	 * @return stdClass|true 
+	 * @throws Exception 
+	 */
 	public function query($sql) {
 		$resource = pg_query($this->link, $sql);
 		if ($resource) {
@@ -34,16 +65,30 @@ final class Postgre {
 			throw new \Exception('Error: ' . pg_result_error($this->link) . '
' . $sql);
 		}
 	}
+	
+	/**
+	 * @param string $value 
+	 * @return string 
+	 */
 	public function escape($value) {
 		return pg_escape_string($this->link, $value);
 	}
+	
+	/** @return int  */
 	public function countAffected() {
 		return pg_affected_rows($this->link);
 	}
+	
+	/**
+	 * @return mixed 
+	 * @throws Exception 
+	 */
 	public function getLastId() {
 		$query = $this->query("SELECT LASTVAL() AS `id`");
 		return $query->row['id'];
 	}
+	
+	/** @return void  */
 	public function __destruct() {
 		pg_close($this->link);
 	}
diff --git a/system/database/database/sqlite3_db.php b/system/database/databases/sqlite3_db.php
similarity index 70%
rename from system/database/database/sqlite3_db.php
rename to system/database/databases/sqlite3_db.php
index a0f3f97..ec4c7f9 100644
--- a/system/database/database/sqlite3_db.php
+++ b/system/database/databases/sqlite3_db.php
@@ -1,17 +1,38 @@
 connection = new SQLite3($hostname.$database, SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, $password);
+        $this->connection = new \SQLite3($hostname.$database, SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE, $password);
 
         if (!$this->connection) {
             throw new \Exception('Error: ' . $this->connection->lastErrorMsg()  . '
Error No: ' . $this->connection->lastErrorCode());
         }
     }
 
+    /**
+     * @param string $sql 
+     * @return true|stdClass 
+     * @throws Exception 
+     */
     public function query($sql){
         //$query = $this->connection->query($sql);
 
@@ -40,21 +61,30 @@ final class Sqlite3_db {
 
     }
 
+    /**
+     * @param string $value 
+     * @return string 
+     */
     public function escape($value) {
         return $this->connection->escapeString($value);
     }
 
+    /** @return int  */
     public function countAffected() {
         return $this->connection->changes();
     }
+    
+    /** @return int  */
     public function getLastId() {
         return $this->connection->lastInsertRowID();
     }
 
+    /** @return bool  */
     public function isConnected() {
         return ($this->connection) ? true : false;
     }
 
+    /** @return void  */
     public function __destruct() {
         $this->connection->close();
     }
diff --git a/system/database/database/sqlsrv.php b/system/database/databases/sqlsrv.php
similarity index 75%
rename from system/database/database/sqlsrv.php
rename to system/database/databases/sqlsrv.php
index b848c1d..fcbc664 100644
--- a/system/database/database/sqlsrv.php
+++ b/system/database/databases/sqlsrv.php
@@ -1,14 +1,31 @@
 link, "SET CHARACTER SET utf8");
     }
 
+    /**
+     * @param string $sql 
+     * @return stdClass|true 
+     */
     public function query($sql) {
         $resource = \sqlsrv_query($this->link, $sql);
 
@@ -42,7 +63,7 @@ final class SQLSRV {
 
                 $data = array();
 
-                while ($result = \sqlsrv_fetch_array($resource, SQLSRV_FETCH_ASSOC)) {
+                while ($result = \sqlsrv_fetch_array($resource, \SQLSRV_FETCH_ASSOC)) {
                     $data[$i] = $result;
 
                     $i++;
@@ -67,16 +88,22 @@ final class SQLSRV {
         }
     }
 
+    /**
+     * @param string $value 
+     * @return string 
+     */
     public function escape($value) {
         $unpacked = unpack('H*hex', $value);
 
         return '0x' . $unpacked['hex'];
     }
 
+    /** @return int  */
     public function countAffected() {
         return \sqlsrv_rows_affected($this->link);
     }
 
+    /** @return false|int  */
     public function getLastId() {
         $last_id = false;
 
@@ -91,6 +118,7 @@ final class SQLSRV {
         return $last_id;
     }
 
+    /** @return void  */
     public function __destruct() {
         \sqlsrv_close($this->link);
     }
diff --git a/system/database/database/sqlsrvpdo.php b/system/database/databases/sqlsrvpdo.php
similarity index 73%
rename from system/database/database/sqlsrvpdo.php
rename to system/database/databases/sqlsrvpdo.php
index 3fdfe93..ddfa80e 100644
--- a/system/database/database/sqlsrvpdo.php
+++ b/system/database/databases/sqlsrvpdo.php
@@ -1,12 +1,33 @@
 connection = new \PDO("sqlsrv:Server=" . $hostname . ";Database=" . $database, $username, $password, array(\PDO::SQLSRV_ATTR_DIRECT_QUERY => true));
+            $this->connection = new PDONative("sqlsrv:Server=" . $hostname . ";Database=" . $database, $username, $password, array(\PDO::SQLSRV_ATTR_DIRECT_QUERY => true));
         } catch(\PDOException $e) {
             throw new \Exception('Failed to connect to database. Reason: \'' . $e->getMessage() . '\'');
         }
@@ -14,10 +35,21 @@ final class sqlsrvPDO {
 
     }
 
+    /**
+     * @param string $sql 
+     * @return void 
+     */
     public function prepare($sql) {
         $this->statement = $this->connection->prepare($sql);
     }
 
+    /**
+     * @param mixed $parameter 
+     * @param mixed $variable 
+     * @param int $data_type 
+     * @param int $length 
+     * @return void 
+     */
     public function bindParam($parameter, $variable, $data_type = \PDO::PARAM_STR, $length = 0) {
         if ($length) {
             $this->statement->bindParam($parameter, $variable, $data_type, $length);
@@ -26,6 +58,10 @@ final class sqlsrvPDO {
         }
     }
 
+    /**
+     * @return never 
+     * @throws Exception 
+     */
     public function execute() {
         try {
             if ($this->statement && $this->statement->execute()) {
@@ -45,6 +81,12 @@ final class sqlsrvPDO {
         }
     }
 
+    /**
+     * @param string $sql 
+     * @param array $params 
+     * @return stdClass 
+     * @throws Exception 
+     */
     public function query($sql, $params = array()) {
         $this->statement = $this->connection->prepare($sql);
 
@@ -78,10 +120,15 @@ final class sqlsrvPDO {
         }
     }
 
+    /**
+     * @param string $value 
+     * @return string 
+     */
     public function escape($value) {
         return str_replace(array("\\", "\0", "\n", "\r", "\x1a", "'", '"'), array("\\\\", "\\0", "\\n", "\\r", "\Z", "\'", '\"'), $value);
     }
 
+    /** @return int  */
     public function countAffected() {
         if ($this->statement) {
             return $this->statement->rowCount();
@@ -90,10 +137,12 @@ final class sqlsrvPDO {
         }
     }
 
+    /** @return string  */
     public function getLastId() {
         return $this->connection->lastInsertId();
     }
 
+    /** @return bool  */
     public function isConnected() {
         if ($this->connection) {
             return true;
@@ -102,7 +151,8 @@ final class sqlsrvPDO {
         }
     }
 
+    /** @return void  */
     public function __destruct() {
-        $this->connection = null;
+        unset($this->connection);
     }
 }
\ No newline at end of file
diff --git a/system/engine/autoload.php b/system/engine/autoload.php
index b9c5115..b3686ec 100644
--- a/system/engine/autoload.php
+++ b/system/engine/autoload.php
@@ -38,6 +38,20 @@ spl_autoload_register(function ($class) {
 
 	$classNative = ($namespace[0] == "Phacil") ? str_replace('phacil\\framework\\', '', strtolower( $class)) : $class;
 
+	if($namespace[0] == 'Phacil' && isset($namespace[2]) && $namespace[2] == 'Databases'){
+		if(!defined('DIR_DATABASE'))
+    		define('DIR_DATABASE', DIR_SYSTEM."database/");
+
+		try {
+			require_once(DIR_DATABASE . str_replace("\\", "/", $classNative).'.php');
+			return;
+		} catch (\Exception $th) {
+			$log = new \Phacil\Framework\Log(DIR_LOGS."exception.log");
+			$log->write($class.' not loaded!');
+			throw new \Phacil\Framework\Exception("Class '$class' not loaded.");
+		}
+	}
+
 	$allowed = [
 		'log',
 		'front',
diff --git a/system/engine/exception.php b/system/engine/exception.php
new file mode 100644
index 0000000..c4f2fb9
--- /dev/null
+++ b/system/engine/exception.php
@@ -0,0 +1,22 @@
+write($this->getMessage());
+	}
+	
+}
diff --git a/system/engine/loader.php b/system/engine/loader.php
index 63457e8..45f5f12 100644
--- a/system/engine/loader.php
+++ b/system/engine/loader.php
@@ -157,7 +157,7 @@ final class Loader implements \Phacil\Framework\Interfaces\Loader {
 		if (file_exists($file)) {
             //include_once($file);
 
-            $this->db->createSubBase($database_name, new DB($driver, $hostname, $username, $password, $database));
+            $this->db->createSubBase($database_name, new Database($driver, $hostname, $username, $password, $database));
 
 			return $database_name;
 		} else {
diff --git a/system/system.php b/system/system.php
index c88c71d..9af0065 100644
--- a/system/system.php
+++ b/system/system.php
@@ -246,7 +246,8 @@ $engine->registry->set('load', $loader);
 $config = new Config();
 $engine->registry->set('config', $config);
 
-$engine->registry->set('db', new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE));
+if(defined('DB_DRIVER'))
+    $engine->registry->set('db', new Database(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE));
 
 // Settings
 if(!empty($configs)){
@@ -257,7 +258,7 @@ if(!empty($configs)){
 
 if(USE_DB_CONFIG === true) {
 
-    $query = (defined('CUSTOM_DB_CONFIG')) ? $db->query(CUSTOM_DB_CONFIG) : $db->query("SELECT * FROM settings ORDER BY setting_id ASC");
+    $query = (defined('CUSTOM_DB_CONFIG')) ? $engine->db->query(CUSTOM_DB_CONFIG) : $engine->db->query("SELECT * FROM settings ORDER BY setting_id ASC");
 
     foreach ($query->rows as $setting) {
         if (!$setting['serialized']) {