diff -urN mantisbt-1.3.0-beta.1/admin/install.php mantisbt-1.3.0-beta.1.modified/admin/install.php
--- mantisbt-1.3.0-beta.1/admin/install.php	Sun Dec 07 14:58:14 2014
+++ mantisbt-1.3.0-beta.1.modified/admin/install.php	Sat Feb 07 09:00:00 2015
@@ -325,7 +325,9 @@
 	print_test( 'Setting Database Hostname', '' !== $f_hostname, true, 'host name is blank' );
 	print_test( 'Setting Database Username', '' !== $f_db_username, true, 'database username is blank' );
 	print_test( 'Setting Database Password', '' !== $f_db_password, false, 'database password is blank' );
-	print_test( 'Setting Database Name', '' !== $f_database_name || $f_db_type == 'oci8', true, 'database name is blank' );
+	if( $f_db_type != 'sqlitepdo' ) {
+		print_test( 'Setting Database Name', '' !== $f_database_name || $f_db_type == 'oci8', true, 'database name is blank' );
+	}
 
 	if( $f_db_type == 'db2' ) {
 		print_test( 'Setting Database Schema', !is_blank( $f_db_schema ), true, 'must have a schema name for AS400 in the form of DBNAME/SCHEMA' );
@@ -526,6 +528,7 @@
 				'pgsql'       => 'PostgreSQL',
 				'oci8'        => 'Oracle',
 				'db2'         => 'IBM DB2',
+				'sqlitepdo'   => 'SQLite',
 			);
 			# mysql is deprecated as of PHP 5.5.0
 			if( version_compare( phpversion(), '5.5.0' ) >= 0 ) {
@@ -875,6 +878,13 @@
 		while( ( $i <= $t_last_id ) && !$g_failed ) {
 			if( !$f_log_queries ) {
 				echo '<tr><td bgcolor="#ffffff">';
+			}
+			
+			if($f_db_type == 'sqlitepdo'){
+				# If the schema has an AUTOINCREMENT field, avoid to use PRIMARY fields in other places.
+				if($g_upgrade[$i][0]=='CreateTableSQL' && $g_upgrade[$i][1][0]==db_get_table( 'tag' )){
+					$g_upgrade[$i][1][1] = preg_replace('!NOTNULL PRIMARY DEFAULT!', 'NOTNULL UNIQUE DEFAULT', $g_upgrade[$i][1][1]);
+				}
 			}
 
 			$t_sql = true;
diff -urN mantisbt-1.3.0-beta.1/core/database_api.php mantisbt-1.3.0-beta.1.modified/core/database_api.php
--- mantisbt-1.3.0-beta.1/core/database_api.php	Sun Dec 07 14:58:14 2014
+++ mantisbt-1.3.0-beta.1.modified/core/database_api.php	Sat Feb 07 09:00:00 2015
@@ -213,6 +213,9 @@
 		case 'odbc_mssql':
 			$t_support = function_exists( 'odbc_connect' );
 			break;
+		case 'sqlitepdo':
+			$t_support = class_exists( 'PDO' );
+			break;
 		default:
 			$t_support = false;
 	}
@@ -506,6 +509,10 @@
 		$t_array = $p_result->fields;
 		$p_result->MoveNext();
 		return $t_array;
+	} else if($p_result->databaseType=='array'){
+		$t_array = each($p_result->_array);
+		if($t_array===false)return false;
+		return $t_array[1];
 	} else {
 		$t_row = $p_result->GetRowAssoc( ADODB_ASSOC_CASE_LOWER );
 		static $s_array_result;
@@ -775,6 +782,9 @@
 			return pg_escape_string( $p_string );
 		case 'oci8':
 			return $p_string;
+		case 'sqlitepdo':
+			$t_escaped = $g_db->_connectionID->quote($p_string);
+			return utf8_substr( $t_escaped, 1, utf8_strlen( $t_escaped ) - 2 );
 		default:
 			error_parameters( 'db_type', $t_db_type );
 			trigger_error( ERROR_CONFIG_OPT_INVALID, ERROR );
diff -urN mantisbt-1.3.0-beta.1/library/adodb/adodb.inc.php mantisbt-1.3.0-beta.1.modified/library/adodb/adodb.inc.php
--- mantisbt-1.3.0-beta.1/library/adodb/adodb.inc.php	Sun Dec 07 14:58:16 2014
+++ mantisbt-1.3.0-beta.1.modified/library/adodb/adodb.inc.php	Sat Feb 07 09:00:00 2015
@@ -4396,6 +4396,7 @@
 		case 'odbtp':   if (strncmp('odbtp_',$drivername,6)==0) return substr($drivername,6);
 		case 'odbc' :   if (strncmp('odbc_',$drivername,5)==0) return substr($drivername,5);
 		case 'ado'  :   if (strncmp('ado_',$drivername,4)==0) return substr($drivername,4);
+		case 'pdo':  	return 'sqlitepdo';
 		case 'native':  break;
 		default:
 			return $provider;
diff -urN mantisbt-1.3.0-beta.1/library/adodb/datadict/datadict-sqlitepdo.inc.php mantisbt-1.3.0-beta.1.modified/library/adodb/datadict/datadict-sqlitepdo.inc.php
--- mantisbt-1.3.0-beta.1/library/adodb/datadict/datadict-sqlitepdo.inc.php	Thu Jan 01 09:00:00 1970
+++ mantisbt-1.3.0-beta.1.modified/library/adodb/datadict/datadict-sqlitepdo.inc.php	Sat Feb 07 09:00:00 2015
@@ -0,0 +1,141 @@
+<?php
+/**
+  V5.10 10 Nov 2009   (c) 2000-2009 John Lim (jlim#natsoft.com). All rights reserved.
+  (c)2015 seclan. All rights reserved.
+  
+  Released under both BSD license and Lesser GPL library license. 
+  Whenever there is any discrepancy between the two licenses, 
+  the BSD license will take precedence.
+	
+  Set tabs to 4 for best viewing.
+ 
+*/
+
+// security - hide paths
+if (!defined('ADODB_DIR')) die();
+
+class ADODB2_sqlitepdo extends ADODB_DataDict {
+	
+	var $databaseType = 'sqlitepdo';
+	var $seqField = false;
+	
+ 	
+ 	function ActualType($meta)
+	{
+		switch($meta) {
+		case 'C': 
+		case 'XL':
+		case 'X': return 'TEXT'; 
+		
+		case 'C2': return 'TEXT';
+		case 'X2': return 'TEXT';
+		
+		case 'B': return 'BLOB';
+			
+		case 'TS':
+		case 'D': 
+		case 'T': return 'TEXT';
+		
+		case 'L': 
+		case 'I': 
+		case 'I1': 
+		case 'I2': 
+		case 'I4': 
+		case 'I8': return 'INTEGER';
+		
+		case 'F': return 'REAL';
+		case 'N': return 'NUMERIC';
+		default:
+			return $meta;
+		}
+	}
+	
+	function _regen_table($tabname, $dropnames = null, $chgtype = null, $renames=null)
+	{
+		if($dropnames===null)	$dropnames=array();
+		if($chgtype===null)		$chgtype=array();
+		if($renames===null)		$renames=array();
+		
+		$mcs = $this->MetaColumns($tabname);
+		$newcols = array();
+		$cpycols = array();
+		$newpkeys = array();
+		
+		foreach($mcs as $fo) {
+			if(isset($dropnames[$fo->name]))continue;
+			//
+			if($chgtype[$fo->name]){
+				$sqln = $chgtype[$fo->name];
+			} else {
+				$sqln = $fo->type;
+				if($fo->max_length) 	$sqln .= "({$fo->max_length})";
+				if($fo->default_value!==NULL)	$sqln .= " DEFAULT {$fo->default_value}";
+				if($fo->not_null)		$sqln .= ' NOT NULL';
+				//ignore scale(sqlite:always 0) $fo->scale
+			}
+			if($renames[$fo->name]){
+				$rname = $renames[$fo->name];
+				$newcols[] = $rname.' '.$sqln;
+				$cpycols[] = "{$fo->name} AS {$rname}";
+				if($fo->primary_key)	$newpkeys[] = $rname;
+			} else {
+				$newcols[] = $fo->name.' '.$sqln;
+				$cpycols[] = $fo->name;
+				if($fo->primary_key)	$newpkeys[] = $fo->name;
+			}
+		}
+		
+		$newcolstr = implode(', ',$newcols);
+		if(count($newpkeys)) $newcolstr.=', PRIMARY KEY('.implode(', ', $newpkeys).')';
+		$cpycolstr = implode(', ',$cpycols);
+
+		$tempname = $tabname.'_tmp';
+		$aSql[] = 'BEGIN TRANSACTION';		// we use a transaction, to make sure not to loose the content of the table
+		$aSql[] = "CREATE TABLE {$tempname}({$newcolstr})";
+		$aSql[] = "INSERT INTO {$tempname} SELECT {$cpycolstr} FROM {$tabname}";
+		$aSql[] = "DROP TABLE {$tabname}";
+		$aSql[] = "ALTER TABLE {$tempname} RENAME TO {$tabname}";
+		// recreate the indexes, if they not contain one of the droped columns
+		$dropflds = array_flip($dropnames);
+		$midx = $this->MetaIndexes($tabname);
+		if(is_array($midx) && count($midx))foreach($midx as $idx_name => $idx_data) {
+			if(!count($dropflds) || !count(array_intersect($dropflds,$idx_data['columns']))){
+				$aSql = array_merge($aSql,$this->CreateIndexSQL($idx_name,$tabname,$idx_data['columns'],
+					$idx_data['unique'] ? array('UNIQUE') : False));
+			}
+		}
+		$aSql[] = 'COMMIT';
+		return $aSql;
+	}
+	
+	function AlterColumnSQL($tabname, $flds)
+	{
+		$t_newflds = $this->_GenFields($flds,true);
+		$t_flds = preg_split('![ \t]+!', current($t_newflds[0]), 2);
+		$chgtype = array($t_flds[0]=>$t_flds[1]);
+		
+		$sqls = $this->_regen_table($tabname,null,$chgtype);
+		return $sqls;
+	}
+	
+	function DropColumnSQL($tabname, $flds)
+	{
+		$dropnames = array_flip(explode(',',$flds));
+		$sqls = $this->_regen_table($tabname,$dropnames);
+		return $sqls;
+	}
+	
+	function RenameColumnSQL($tabname,$oldcolumn,$newcolumn,$flds='')
+	{
+		if($flds!=''){
+			$t_newflds = $this->_GenFields($flds,true);
+			$t_flds = preg_split('![ \t]+!', current($t_newflds[0]), 2);
+			$chgtype = array($t_flds[0]=>$t_flds[1]);
+		} else {
+			$chgtype = null;
+		}
+		$renames=array($oldcolumn=>$newcolumn);
+		$sqls = $this->_regen_table($tabname,null,$chgtype,$renames);
+		return $sqls;
+	}
+}
diff -urN mantisbt-1.3.0-beta.1/library/adodb/drivers/adodb-pdo.inc.php mantisbt-1.3.0-beta.1.modified/library/adodb/drivers/adodb-pdo.inc.php
--- mantisbt-1.3.0-beta.1/library/adodb/drivers/adodb-pdo.inc.php	Sun Dec 07 14:58:16 2014
+++ mantisbt-1.3.0-beta.1.modified/library/adodb/drivers/adodb-pdo.inc.php	Sat Feb 07 09:00:00 2015
@@ -220,6 +220,14 @@
 		return $this->_driver->MetaColumns($table,$normalize);
 	}
 
+	function MetaIndexes($table, $primary = false, $owner = false)
+	{
+		if(method_exists($this->_driver,'MetaIndexes'))
+			return $this->_driver->MetaIndexes($table, $primary, $owner);
+		else
+			return parent::MetaIndexes($table, $primary, $owner);
+	}
+	
 	function InParameter(&$stmt,&$var,$name,$maxLen=4000,$type=false)
 	{
 		$obj = $stmt[1];
diff -urN mantisbt-1.3.0-beta.1/library/adodb/drivers/adodb-pdo_sqlite.inc.php mantisbt-1.3.0-beta.1.modified/library/adodb/drivers/adodb-pdo_sqlite.inc.php
--- mantisbt-1.3.0-beta.1/library/adodb/drivers/adodb-pdo_sqlite.inc.php	Sun Dec 07 14:58:16 2014
+++ mantisbt-1.3.0-beta.1.modified/library/adodb/drivers/adodb-pdo_sqlite.inc.php	Sat Feb 07 09:00:00 2015
@@ -199,4 +199,60 @@
 		}
 		return $ret;
    }
+
+	function __adodb_save_fetchmode()
+	{
+		global $ADODB_FETCH_MODE;
+		
+		$r = array('g_fm'=>$ADODB_FETCH_MODE);
+		$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
+		if($this->pdoDriver->fetchMode !== false)	$r['fm'] = $this->pdoDriver->SetFetchMode(false);
+		
+		return $r;
+	}
+	function __adodb_restore_fetchmode($p_fm)
+	{
+		global $ADODB_FETCH_MODE;
+		
+		if(isset($p_fm['fm']))	$this->pdoDriver->SetFetchMode($p_fm['fm']);
+		$ADODB_FETCH_MODE = $p_fm['g_fm'];
+	}
+	
+	function MetaIndexes($table, $primary = false, $owner = false)
+	{
+		if($primary !== false)	return false;
+		if($owner !== false)	return false;
+		
+		$fm = $this->__adodb_save_fetchmode();
+		
+		$r = false;
+		$res = $this->pdoDriver->Execute("PRAGMA index_list('{$table}')");
+		if(is_object($res)) {
+			$excpfix='sqlite_autoindex_';
+			$excpfix_len=strlen($excpfix);
+			
+			$r = array();
+			while($rr = $res->FetchRow()){
+				if(substr($rr['name'],0,$excpfix_len)==$excpfix)continue;
+				$r[$rr['name']]['unique'] = $rr['unique']-0 ? true: false;
+				$r[$rr['name']]['columns'] = array();
+			}
+			$res->Close();
+			
+			foreach($r as $idxname=>$idxinfo){
+				$res = $this->pdoDriver->Execute("PRAGMA index_info('{$idxname}')");
+				if(!is_object($res))continue;
+				
+				while($rr = $res->FetchRow()){
+					$r[$idxname]['columns'][$rr['seqno']] = $rr['name'];
+				}
+				$res->Close();
+			}
+		}
+		
+		$this->__adodb_restore_fetchmode($fm);
+		
+		return $r;
+	}
+
 }
diff -urN mantisbt-1.3.0-beta.1/library/adodb/drivers/adodb-sqlitepdo.inc.php mantisbt-1.3.0-beta.1.modified/library/adodb/drivers/adodb-sqlitepdo.inc.php
--- mantisbt-1.3.0-beta.1/library/adodb/drivers/adodb-sqlitepdo.inc.php	Thu Jan 01 09:00:00 1970
+++ mantisbt-1.3.0-beta.1.modified/library/adodb/drivers/adodb-sqlitepdo.inc.php	Sat Feb 07 09:00:00 2015
@@ -0,0 +1,19 @@
+<?php
+/**
+	@file	adodb-sqlitepdo.inc.php
+	@author	(c)2015 seclan. All rights reserved.
+	
+	Released under both BSD license and Lesser GPL library license. 
+	Whenever there is any discrepancy between the two licenses, 
+	the BSD license will take precedence.
+*/
+
+require_once('adodb-pdo.inc.php');
+
+class ADODB_sqlitepdo extends ADODB_pdo {
+	function _connect($argDSN, $argUsername, $argPassword, $argDatabasename, $persist=false)
+	{
+		return parent::_connect('sqlite:'.$argDSN, $argUsername, $argPassword, null, $persist);
+	}
+};
+
