diff --git a/database/Config.php b/database/Config.php
index bb9bdb8ff3979710aacc5edd5519149bb5c7974c..8779ea47351c1f4a55e14695dc61e3e78284b933 100644
--- a/database/Config.php
+++ b/database/Config.php
@@ -8,25 +8,30 @@ class Config
     public $database_connector;
     public $username;
     public $password;
+    public $database_options;
 
     public $backend;
 
     public $path_prefix;
 
-    public function __construct(string $path_prefix, string $database_connector, string $username, string $password, string $backend)
+    public function __construct(string $path_prefix, string $database_connector, string $username, string $password, string $backend, array $options)
     {
         $this->database_connector = $database_connector;
         $this->username = $username;
         $this->password = $password;
+        $this->database_options = $options;
         $this->path_prefix = $path_prefix;
         $this->backend = $backend;
     }
 
     public static function createFromGlobals()
     {
+        $options = [];
+        if (defined(qrs_db_option_tsqueryfunction) && null !== qrs_db_option_tsqueryfunction)
+            $options['tsqueryfunction'] = qrs_db_option_tsqueryfunction;
         if (defined(qrs_db_connector) && null !== qrs_db_connector)
-            return new Config(qrs_path_prefix, qrs_db_connector, qrs_db_user, qrs_db_pass, qrs_backend);
+            return new Config(qrs_path_prefix, qrs_db_connector, qrs_db_user, qrs_db_pass, qrs_backend, $options);
         else
-            return new Config(qrs_path_prefix, 'pgsql:host=' . qrs_db_host . ';port=' . qrs_db_port . ';dbname=' . qrs_db_name . '', qrs_db_user, qrs_db_pass, qrs_backend);
+            return new Config(qrs_path_prefix, 'pgsql:host=' . qrs_db_host . ';port=' . qrs_db_port . ';dbname=' . qrs_db_name . '', qrs_db_user, qrs_db_pass, qrs_backend, $options);
     }
 }
diff --git a/database/Database.php b/database/Database.php
index d6a28c7961acfa12ee34db915f3aee497dee669a..599c57d891745eab71b208b5cb66121f1c929a5c 100644
--- a/database/Database.php
+++ b/database/Database.php
@@ -15,19 +15,19 @@ class Database
 
     private $backend;
 
-    private function __construct(string $database_connector, string $username, string $password, string $type)
+    private function __construct(string $database_connector, string $username, string $password, string $type, array $options)
     {
-        $this->backend = BackendFactory::create($type, new \PDO($database_connector, $username, $password));
+        $this->backend = BackendFactory::create($type, new \PDO($database_connector, $username, $password), $options);
     }
 
     public static function createFromConfig(Config $config): Database
     {
-        return Database::createFromOptions($config->database_connector, $config->username, $config->password, $config->backend);
+        return Database::createFromOptions($config->database_connector, $config->username, $config->password, $config->backend, $config->database_options);
     }
 
-    public static function createFromOptions(string $database_connector, string $username, string $password, string $type): Database
+    public static function createFromOptions(string $database_connector, string $username, string $password, string $type, array $options): Database
     {
-        return new Database($database_connector, $username, $password, $type);
+        return new Database($database_connector, $username, $password, $type, $options);
     }
 
     public function authenticateFromHeader(string $header): bool
diff --git a/database/backends/BackendFactory.php b/database/backends/BackendFactory.php
index d2d56406d06108b994bdeb60e16964ea81bdbf4a..2c44f177db085fd5fe0fcc541f9fd46b7c7acc06 100644
--- a/database/backends/BackendFactory.php
+++ b/database/backends/BackendFactory.php
@@ -8,13 +8,13 @@ require_once 'SQLiteSmartBackend.php';
 class BackendFactory
 {
 
-    public static function create(string $type, \PDO $db): Backend
+    public static function create(string $type, \PDO $db, array $options): Backend
     {
         switch ($type) {
             case 'pgsql-smart':
-                return new PostgresSmartBackend($db);
+                return new PostgresSmartBackend($db, $options);
             case 'sqlite-smart':
-                return new SQLiteSmartBackend($db);
+                return new SQLiteSmartBackend($db, $options);
             default:
                 return null;
         }
diff --git a/database/backends/PostgresSmartBackend.php b/database/backends/PostgresSmartBackend.php
index cd95adc67ccdd3748f1774afea820c65ef7a5ba3..319b61d56fe5b8b08d666cf6a6ff9143f5a46665 100644
--- a/database/backends/PostgresSmartBackend.php
+++ b/database/backends/PostgresSmartBackend.php
@@ -7,11 +7,13 @@ require_once 'Backend.php';
 class PostgresSmartBackend implements Backend
 {
     private $db;
+    private $options;
 
-    function __construct(\PDO $db)
+    function __construct(\PDO $db, array $options)
     {
         $this->db = $db;
         $this->db->exec("SET statement_timeout = 5000;");
+        $this->options = $options;
     }
 
     public function findUser(): \PDOStatement
@@ -23,8 +25,14 @@ class PostgresSmartBackend implements Backend
         ");
     }
 
+    private function tsQueryFunction(): string
+    {
+        return array_key_exists('tsqueryfunction', $this->options) ? $this->options['tsqueryfunction'] : "plainto_tsquery('english', :query)";
+    }
+
     public function findInBuffers(): \PDOStatement
     {
+        $tsQueryFunction = $this->tsQueryFunction();
         return $this->db->prepare("
             SELECT
               ranked_messages.bufferid,
@@ -70,7 +78,7 @@ class PostgresSmartBackend implements Backend
                   FROM
                     backlog
                     JOIN buffer ON backlog.bufferid = buffer.bufferid
-                    , phraseto_tsquery_multilang(:query) query
+                    , $tsQueryFunction query
                   WHERE buffer.userid = :userid
                     AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
                     AND (:ignore_before::BOOLEAN OR backlog.time < :before::TIMESTAMP)
@@ -90,6 +98,7 @@ class PostgresSmartBackend implements Backend
 
     public function findInBuffersCount(): \PDOStatement
     {
+        $tsQueryFunction = $this->tsQueryFunction();
         return $this->db->prepare("
             SELECT
               backlog.bufferid,
@@ -99,7 +108,7 @@ class PostgresSmartBackend implements Backend
               JOIN buffer ON backlog.bufferid = buffer.bufferid
               JOIN sender ON backlog.senderid = sender.senderid
               JOIN network ON buffer.networkid = network.networkid
-              , phraseto_tsquery_multilang(:query) query
+              , $tsQueryFunction query
             WHERE buffer.userid = :userid
               AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
               AND (:ignore_before::BOOLEAN OR backlog.time < :before::TIMESTAMP)
@@ -113,6 +122,7 @@ class PostgresSmartBackend implements Backend
 
     public function findInBuffer(): \PDOStatement
     {
+        $tsQueryFunction = $this->tsQueryFunction();
         return $this->db->prepare("
             SELECT
               matching_messages.messageid,
@@ -142,7 +152,7 @@ class PostgresSmartBackend implements Backend
                FROM
                  backlog
                  JOIN buffer ON backlog.bufferid = buffer.bufferid
-                 , phraseto_tsquery_multilang(:query) query
+                 , $tsQueryFunction query
                WHERE buffer.userid = :userid
                  AND buffer.bufferid = :bufferid
                  AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
@@ -161,6 +171,7 @@ class PostgresSmartBackend implements Backend
 
     public function findInBufferCount(): \PDOStatement
     {
+        $tsQueryFunction = $this->tsQueryFunction();
         return $this->db->prepare("
             SELECT
               COUNT(*) > (:limit::INT + :offset::INT) AS hasmore
@@ -168,7 +179,7 @@ class PostgresSmartBackend implements Backend
               backlog
               JOIN buffer ON backlog.bufferid = buffer.bufferid
               JOIN sender ON backlog.senderid = sender.senderid
-              , phraseto_tsquery_multilang(:query) query
+              , $tsQueryFunction query
             WHERE buffer.userid = :userid
               AND backlog.bufferid = :bufferid
               AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
diff --git a/database/backends/SQLiteSmartBackend.php b/database/backends/SQLiteSmartBackend.php
index 0d83a467db7484c50d3bf43100452503515c4bab..fcac6e49846daa442afb3bbccd8e054f5e8c292e 100644
--- a/database/backends/SQLiteSmartBackend.php
+++ b/database/backends/SQLiteSmartBackend.php
@@ -7,10 +7,12 @@ require_once 'Backend.php';
 class SQLiteSmartBackend implements Backend
 {
     private $db;
+    private $options;
 
-    function __construct(\PDO $db)
+    function __construct(\PDO $db, array $options)
     {
         $this->db = $db;
+        $this->options = $options;
     }
 
     public function findUser(): \PDOStatement
diff --git a/qrs_config.default.php b/qrs_config.default.php
index 4ef34f9c0f7769b298198ff7c7fb232e5c7f0cbc..95539f3c28f4f7141d5325f72a7ffc15501dbbe8 100644
--- a/qrs_config.default.php
+++ b/qrs_config.default.php
@@ -9,6 +9,8 @@ define('qrs_db_connector', null);
 define('qrs_db_user', 'quassel');
 define('qrs_db_pass', 'password');
 
+define('qrs_db_option_tsqueryfunction', "plainto_tsquery('english', :query)");
+
 define('qrs_backend', 'pgsql-smart');
 
 define('qrs_path_prefix', '');
diff --git a/res/js/util/mirccolorhandler.js b/res/js/util/mirccolorhandler.js
index 076eb5d8ce2e8188467a27e46467878f0a441aa5..e4909c9dc5517580c5b6667712766f500221b544 100644
--- a/res/js/util/mirccolorhandler.js
+++ b/res/js/util/mirccolorhandler.js
@@ -57,8 +57,12 @@ class MircColorHandler {
             const s = unescape(str.substr(i - normalCount, normalCount));
             if (normalCount === 0)
                 return;
-            if (lastTag.tagName === 'A')
-                lastTag.href = s;
+            if (lastTag.tagName === 'A') {
+                if (s.indexOf('://') !== -1)
+                    lastTag.href = s;
+                else
+                    lastTag.href = "http://" + s;
+            }
             lastTag.appendChild(document.createTextNode(s));
             nodes.push(lastTag);
         };