Index: design/standard/templates/setup/init/database_init.tpl
===================================================================
--- design/standard/templates/setup/init/database_init.tpl	(revision 20604)
+++ design/standard/templates/setup/init/database_init.tpl	(working copy)
@@ -101,6 +101,10 @@
   <td class="normal"><input type="text" name="eZSetupDatabaseServer" size="16" value="{$database_info.server|wash}" /></td>
 </tr>
 <tr>
+  <td class="normal"><label class="textfield">{"Port"|i18n("design/standard/setup/init")}:</label></td>
+  <td class="normal"><input type="text" name="eZSetupDatabasePort" size="16" value="{$database_info.port|wash}" /></td>
+</tr>
+<tr>
   <td class="normal"><label class="textfield">{"Username"|i18n("design/standard/setup/init")}:</label></td>
   <td class="normal"><input type="text" name="eZSetupDatabaseUser" size="16" value="{$database_info.user|wash}" /></td>
 </tr>
Index: kernel/setup/steps/ezstep_create_sites.php
===================================================================
--- kernel/setup/steps/ezstep_create_sites.php	(revision 20604)
+++ kernel/setup/steps/ezstep_create_sites.php	(working copy)
@@ -436,6 +436,7 @@
         $databaseInfo['info'] = $databaseMap[$databaseInfo['type']];
 
         $dbServer = $databaseInfo['server'];
+        $dbPort = $databaseInfo['port'];
 //        $dbName = $databaseInfo['dbname'];
         $dbSocket = $databaseInfo['socket'];
         $dbUser = $databaseInfo['user'];
@@ -445,6 +446,7 @@
 
         $dbName = $siteType['database'];
         $dbParameters = array( 'server' => $dbServer,
+                               'port' => $dbPort,
                                'user' => $dbUser,
                                'password' => $dbPwd,
                                'socket' => $dbSocket,
@@ -584,6 +586,7 @@
                                                  'SiteURL' => $url );
         $siteINIChanges['DatabaseSettings'] = array( 'DatabaseImplementation' => $dbDriver,
                                                      'Server' => $dbServer,
+                                                     'Port' => $dbPort,
                                                      'Database' => $dbName,
                                                      'User' => $dbUser,
                                                      'Password' => $dbPwd,
Index: kernel/setup/steps/ezstep_database_init.php
===================================================================
--- kernel/setup/steps/ezstep_database_init.php	(revision 20604)
+++ kernel/setup/steps/ezstep_database_init.php	(working copy)
@@ -63,6 +63,8 @@
         // Get database parameters from input form.
         if ( $this->Http->hasPostVariable( 'eZSetupDatabaseServer' ) )
             $this->PersistenceList['database_info']['server'] = $this->Http->postVariable( 'eZSetupDatabaseServer' );
+        if ( $this->Http->hasPostVariable( 'eZSetupDatabasePort' ) )
+            $this->PersistenceList['database_info']['port'] = $this->Http->postVariable( 'eZSetupDatabasePort' );
         if ( $this->Http->hasPostVariable( 'eZSetupDatabaseName' ) )
             $this->PersistenceList['database_info']['dbname'] = $this->Http->postVariable( 'eZSetupDatabaseName' );
         if ( $this->Http->hasPostVariable( 'eZSetupDatabaseUser' ) )
@@ -153,6 +155,7 @@
             // Fill in database info in persistence list
             // This is needed for db requirement check
             $this->PersistenceList['database_info']['server'] = $data['Server'];
+            $this->PersistenceList['database_info']['port'] = $data['Port'];
             $this->PersistenceList['database_info']['dbname'] = $data['Database'];
             $this->PersistenceList['database_info']['user'] = $data['User'];
             $this->PersistenceList['database_info']['password'] = $data['Password'];
@@ -187,6 +190,9 @@
         if ( !isset( $this->PersistenceList['database_info']['server'] ) or
              !$this->PersistenceList['database_info']['server'] )
             $this->PersistenceList['database_info']['server'] = $config->variable( 'DatabaseSettings', 'DefaultServer' );
+        if ( !isset( $this->PersistenceList['database_info']['port'] ) or
+             !$this->PersistenceList['database_info']['port'] )
+            $this->PersistenceList['database_info']['port'] = $config->variable( 'DatabaseSettings', 'DefaultPort' );
         if ( !isset( $this->PersistenceList['database_info']['dbname'] ) or
              !$this->PersistenceList['database_info']['dbname'] )
             $this->PersistenceList['database_info']['dbname'] = $config->variable( 'DatabaseSettings', 'DefaultName' );
Index: kernel/setup/steps/ezstep_installer.php
===================================================================
--- kernel/setup/steps/ezstep_installer.php	(revision 20604)
+++ kernel/setup/steps/ezstep_installer.php	(working copy)
@@ -351,6 +351,7 @@
         if ( $dbCharset === false )
             $dbCharset = 'iso-8859-1';
         $dbParameters = array( 'server' => $databaseInfo['server'],
+                               'port' => $databaseInfo['port'],
                                'user' => $databaseInfo['user'],
                                'password' => $databaseInfo['password'],
                                'socket' => trim( $databaseInfo['socket'] ) == '' ? false : $databaseInfo['socket'],
Index: kickstart.ini-dist
===================================================================
--- kickstart.ini-dist	(revision 20604)
+++ kickstart.ini-dist	(working copy)
@@ -111,6 +111,8 @@
 ## Server=<hostname>
 ## Which hostname has the database server
 #Server=localhost
+## Which port to connect to the database server
+#Port=
 ## Database=<database>
 ## Which database to use
 #Database=ezp35test
Index: lib/ezdb/classes/ezdb.php
===================================================================
--- lib/ezdb/classes/ezdb.php	(revision 20604)
+++ lib/ezdb/classes/ezdb.php	(working copy)
@@ -168,8 +168,8 @@
 
             $server = $user = $pwd = $db = $usePersistentConnection = false;
             if ( $useDefaults )
-                list( $server, $user, $pwd, $db, $usePersistentConnection ) =
-                    $ini->variableMulti( 'DatabaseSettings', array( 'Server', 'User', 'Password', 'Database', 'UsePersistentConnection' ) );
+                list( $server, $port, $user, $pwd, $db, $usePersistentConnection ) =
+                    $ini->variableMulti( 'DatabaseSettings', array( 'Server', 'Port', 'User', 'Password', 'Database', 'UsePersistentConnection', ) );
 
             $socketPath = false;
             if ( $useDefaults )
@@ -183,6 +183,7 @@
 
             // Check slave servers
             $slaveServer = null;
+            $slaveServerPort = null;
             $slaveServerUser = null;
             $slaveServerPassword = null;
             $slaveServerDatabase = null;
@@ -190,6 +191,7 @@
             if ( $useSlave == "enabled" )
             {
                 $slaveServers = $ini->variable( 'DatabaseSettings', 'SlaveServerArray' );
+                $slaveServerPorts = $ini->variable( 'DatabaseSettings', 'SlaveServerPort' );
                 $slaveServerUsers = $ini->variable( 'DatabaseSettings', 'SlaverServerUser' );
                 $slaveServerPasswords = $ini->variable( 'DatabaseSettings', 'SlaverServerPassword' );
                 $slaveServerDatabases = $ini->variable( 'DatabaseSettings', 'SlaverServerDatabase' );
@@ -201,6 +203,7 @@
                 else
                     $index = 0;
                 $slaveServer = $slaveServers[$index];
+                $slaveServerPort = $slaveServerPorts[$index];
                 $slaveServerUser = $slaveServerUsers[$index];
                 $slaveServerPassword = $slaveServerPasswords[$index];
                 $slaveServerDatabase = $slaveServerDatabases[$index];
@@ -226,11 +229,13 @@
             if ( $useSlave == "enabled" )
                 $useSlaveServer = true;
             $defaultDatabaseParameters = array( 'server' => $server,
+                                                'port' => $port,
                                                 'user' => $user,
                                                 'password' => $pwd,
                                                 'database' => $db,
                                                 'use_slave_server' => $useSlaveServer,
                                                 'slave_server' => $slaveServer,
+                                                'slave_port' => $slaveServerPort,
                                                 'slave_user' => $slaveServerUser,
                                                 'slave_password' => $slaveServerPassword,
                                                 'slave_database' => $slaveServerDatabase,
@@ -246,6 +251,8 @@
             $databaseParameters = $defaultDatabaseParameters;
             if ( isset( $b['server'] ) )
                 $databaseParameters['server'] = $b['server'];
+            if ( isset( $b['port'] ) )
+                $databaseParameters['port'] = $b['port'];
             if ( isset( $b['user'] ) )
                 $databaseParameters['user'] = $b['user'];
             if ( isset( $b['password'] ) )
@@ -256,6 +263,8 @@
                 $databaseParameters['use_slave_server'] = $b['use_slave_server'];
             if ( isset( $b['slave_server'] ) )
                 $databaseParameters['slave_server'] = $b['slave_server'];
+            if ( isset( $b['slave_port'] ) )
+                $databaseParameters['slave_port'] = $b['slave_port'];
             if ( isset( $b['slave_user'] ) )
                 $databaseParameters['slave_user'] = $b['slave_user'];
             if ( isset( $b['slave_password'] ) )
Index: lib/ezdb/classes/ezdbinterface.php
===================================================================
--- lib/ezdb/classes/ezdbinterface.php	(revision 20604)
+++ lib/ezdb/classes/ezdbinterface.php	(working copy)
@@ -70,11 +70,13 @@
     function eZDBInterface( $parameters )
     {
         $server = $parameters['server'];
+        $port = $parameters['port'];
         $user = $parameters['user'];
         $password = $parameters['password'];
         $db = $parameters['database'];
         $useSlaveServer = $parameters['use_slave_server'];
         $slaveServer = $parameters['slave_server'];
+        $slavePort = $parameters['slave_port'];
         $slaveUser = $parameters['slave_user'];
         $slavePassword = $parameters['slave_password'];
         $slaveDB =  $parameters['slave_database'];
@@ -91,12 +93,14 @@
 
         $this->DB = $db;
         $this->Server = $server;
+        $this->Port = $port;
         $this->SocketPath = $socketPath;
         $this->User = $user;
         $this->Password = $password;
         $this->UseSlaveServer = $useSlaveServer;
         $this->SlaveDB = $slaveDB;
         $this->SlaveServer = $slaveServer;
+        $this->SlavePort = $slavePort;
         $this->SlaveUser = $slaveUser;
         $this->SlavePassword = $slavePassword;
         $this->Charset = $charset;
@@ -171,11 +175,13 @@
         array(
             'database_name' => 'DB',
             'database_server' => 'Server',
+            'database_port' => 'Port',
             'database_socket_path' => 'SocketPath',
             'database_user' => 'User',
             'use_slave_server' => 'UseSlaveServer',
             'slave_database_name' => 'SlaveDB',
             'slave_database_server' => 'SlaveServer',
+            'slave_database_port' => 'SlavePort',
             'slave_database_user' => 'SlaveUser',
             'charset' => 'Charset',
             'is_internal_charset' => 'IsInternalCharset',
@@ -1321,6 +1327,8 @@
     /// \protectedsection
     /// Contains the current server
     public $Server;
+    /// Contains the current port
+    public $Port;
     /// The socket path, used by MySQL
     public $SocketPath;
     /// The current database name
@@ -1369,6 +1377,8 @@
     public $SlaveDB;
     /// The slave server name
     public $SlaveServer;
+    /// The slave server port
+    public $SlavePort;
     /// The slave database user
     public $SlaveUser;
     /// The slave database user password
Index: lib/ezdb/classes/ezmysqldb.php
===================================================================
--- lib/ezdb/classes/ezmysqldb.php	(revision 20604)
+++ lib/ezdb/classes/ezmysqldb.php	(working copy)
@@ -82,7 +82,7 @@
         /// Connect to master server
         if ( $this->DBWriteConnection == false )
         {
-            $connection = $this->connect( $this->Server, $this->DB, $this->User, $this->Password, $this->SocketPath, $this->Charset );
+            $connection = $this->connect( $this->Server, $this->DB, $this->User, $this->Password, $this->SocketPath, $this->Charset, $this->Port );
             if ( $this->IsConnected )
             {
                 $this->DBWriteConnection = $connection;
@@ -94,7 +94,7 @@
         {
             if ( $this->UseSlaveServer === true )
             {
-                $connection = $this->connect( $this->SlaveServer, $this->SlaveDB, $this->SlaveUser, $this->SlavePassword, $this->SocketPath, $this->Charset );
+                $connection = $this->connect( $this->SlaveServer, $this->SlaveDB, $this->SlaveUser, $this->SlavePassword, $this->SocketPath, $this->Charset, $this->SlavePort );
             }
             else
             {
@@ -115,8 +115,14 @@
      \private
      Opens a new connection to a MySQL database and returns the connection
     */
-    function connect( $server, $db, $user, $password, $socketPath, $charset = null )
+    function connect( $server, $db, $user, $password, $socketPath, $charset = null, $port = false )
     {
+        // if a port is specified, we add it to $server, this is how mysql_(p)connect accepts a port number
+        if ( $port )
+        {
+            $server .= ':' . $port;
+        }
+
         $connection = false;
 
         if ( $socketPath !== false )
Index: lib/ezdb/classes/ezmysqlidb.php
===================================================================
--- lib/ezdb/classes/ezmysqlidb.php	(revision 20604)
+++ lib/ezdb/classes/ezmysqlidb.php	(working copy)
@@ -114,7 +114,7 @@
      \private
      Opens a new connection to a MySQL database and returns the connection
     */
-    function connect( $server, $db, $user, $password, $socketPath, $charset = null )
+    function connect( $server, $db, $user, $password, $socketPath, $charset = null, $port = false )
     {
         $connection = false;
 
@@ -128,7 +128,7 @@
             eZDebug::writeWarning( 'mysqli does not support persistent connections', 'eZMySQLiDB::connect' );
         }
 
-        $connection = mysqli_connect( $server, $user, $password );
+        $connection = mysqli_connect( $server, $user, $password, null, $port, $socketPath );
 
         $dbErrorText = mysqli_connect_error();
         $maxAttempts = $this->connectRetryCount();
@@ -142,7 +142,7 @@
                 eZDebug::writeWarning( 'mysqli does not support persistent connections', 'eZMySQLiDB::connect' );
             }
 
-            $connection = mysqli_connect( $this->Server, $this->User, $this->Password );
+            $connection = mysqli_connect( $this->Server, $this->User, $this->Password, null, $this->Port, $this->SocketPath );
 
             $numAttempts++;
         }
Index: lib/ezdb/classes/ezpostgresqldb.php
===================================================================
--- lib/ezdb/classes/ezpostgresqldb.php	(revision 20604)
+++ lib/ezdb/classes/ezpostgresqldb.php	(working copy)
@@ -69,6 +69,7 @@
         $ini = eZINI::instance();
 
         $server = $this->Server;
+        $port = $this->Port;
         $db = $this->DB;
         $user = $this->User;
         $password = $this->Password;
@@ -82,6 +83,9 @@
             $connectParams[] = "user='$user'";
         if ( $password !== false and $password !== null )
             $connectParams[] = "password='$password'";
+        if ( $port )
+            $connectParams[] = "port='$port'";
+
         $connectString = implode( " ", $connectParams );
 
         if ( $ini->variable( "DatabaseSettings", "UsePersistentConnection" ) == "enabled" &&  function_exists( "pg_pconnect" ))
Index: settings/setup.ini
===================================================================
--- settings/setup.ini	(revision 20604)
+++ settings/setup.ini	(working copy)
@@ -69,6 +69,7 @@
 
 [DatabaseSettings]
 DefaultServer=localhost
+DefaultPort=
 DefaultName=ezpublish3
 DefaultUser=root
 DefaultPassword=
Index: settings/site.ini
===================================================================
--- settings/site.ini	(revision 20604)
+++ settings/site.ini	(working copy)
@@ -14,6 +14,7 @@
 # Use either ezmysql or ezpostgresql
 DatabaseImplementation=ezmysql
 Server=localhost
+Port=
 User=root
 Password=
 Database=nextgen
@@ -22,6 +23,7 @@
 # Useful for load balanced environments
 UseSlaveServer=disabled
 #SlaveServerArray[]=localhost
+#SlaveServerPort[]=
 #SlaverServerUser[]=nextgen
 #SlaverServerPassword[]=nextgen
 #SlaverServerDatabase[]=nextgen
