Index: branches/main/admin/interface/version.php
===================================================================
--- branches/main/admin/interface/version.php	(revision 30)
+++ branches/main/admin/interface/version.php	(revision 31)
@@ -44,7 +44,7 @@
 if (!defined('VERSION_LOADED')) {
     $sInfo = '
         VERSION  = "2.11.0-RC1"
-        REVISION = "30"
+        REVISION = "31"
         SP       = ""
     ';
     foreach (parse_ini_string($sInfo) as $item=>$value) {
Index: branches/main/framework/HttpRequester.php
===================================================================
--- branches/main/framework/HttpRequester.php	(revision 30)
+++ branches/main/framework/HttpRequester.php	(revision 31)
@@ -33,7 +33,7 @@
 //declare(strict_types = 1);
 //declare(encoding = 'UTF-8');
 
-namespace bin;
+namespace bin\requester;
 
 use bin\interfaces\RequesterInterface;
 
@@ -50,7 +50,6 @@
  */
     public function __construct()
     {
-//        $this->aServer = \filter_input_array(INPUT_SERVER);
         $aServer = \filter_input_array(INPUT_SERVER);
         switch (\strtolower($aServer['REQUEST_METHOD'])):
             case 'post':
@@ -60,11 +59,11 @@
                 $this->aParameters = \filter_input_array(INPUT_GET);
                 break;
             default:
-                $this->aParameters = [];
                 break;
         endswitch;
+        if ($this->aParameters == null) { $this->aParameters = []; }
         foreach ($aServer as $sKey => $sValue) {
-            if (substr_compare($sKey, 'HTTP_', 0, 5) === 0) {
+            if (\substr_compare($sKey, 'HTTP_', 0, 5) === 0) {
                 $this->aHeaders[$sKey] = $sValue;
             } else {
                 $this->aServer[$sKey] = $sValue;
@@ -86,6 +85,7 @@
  */
     public function issetParam($sParamName)
     {
+
         return \array_key_exists($sParamName, $this->aParameters);
     }
 /**
@@ -134,7 +134,7 @@
     public function getHeader($sHeaderName)
     {
         $sRetval = null;
-        $sVarname = 'HTTP_'.preg_replace('/^http_/i', '', $sHeaderName);
+        $sVarname = 'HTTP_'.\preg_replace('/^http_/i', '', $sHeaderName);
         if ($this->issetHeader($sVarname)) {
             $sRetval = $this->aHeaders($sVarname);
         }
Index: branches/main/framework/initialize.php
===================================================================
--- branches/main/framework/initialize.php	(revision 30)
+++ branches/main/framework/initialize.php	(revision 31)
@@ -207,37 +207,37 @@
 
 function WbErrorHandler($iErrorCode, $sErrorText, $sErrorFile, $iErrorLine)
 {
-     if (!(error_reporting() & $iErrorCode) || ini_get('log_errors') == 0) {
-        return false;
-    }
     $bRetval = false;
-    $sErrorLogFile = ini_get ('error_log');
-    if (!is_writeable($sErrorLogFile)){return false;}
-    $sErrorType = E_NOTICE ;
-    $aErrors = array(
-        E_USER_DEPRECATED   => 'E_USER_DEPRECATED',
-        E_USER_NOTICE       => 'E_USER_NOTICE',
-        E_USER_WARNING      => 'E_USER_WARNING',
-        E_DEPRECATED        => 'E_DEPRECATED',
-        E_NOTICE            => 'E_NOTICE',
-        E_WARNING           => 'E_WARNING',
-        E_CORE_WARNING      => 'E_CORE_WARNING',
-        E_COMPILE_WARNING   => 'E_COMPILE_WARNING',
-        E_STRICT            => 'E_STRICT',
-        E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
-    );
-    if (array_key_exists($iErrorCode, $aErrors)) {
-        $sErrorType = $aErrors[$iErrorCode];
-        $bRetval = true;
+    if ((error_reporting() & $iErrorCode) || ini_get('log_errors') != 0) {
+        $sErrorLogFile = ini_get ('error_log');
+        if (is_writeable($sErrorLogFile)) {
+            $sErrorType = E_NOTICE ;
+            $aErrors = [
+                E_USER_DEPRECATED   => 'E_USER_DEPRECATED',
+                E_USER_NOTICE       => 'E_USER_NOTICE',
+                E_USER_WARNING      => 'E_USER_WARNING',
+                E_DEPRECATED        => 'E_DEPRECATED',
+                E_NOTICE            => 'E_NOTICE',
+                E_WARNING           => 'E_WARNING',
+                E_CORE_WARNING      => 'E_CORE_WARNING',
+                E_COMPILE_WARNING   => 'E_COMPILE_WARNING',
+                E_STRICT            => 'E_STRICT',
+                E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
+            ];
+            if (array_key_exists($iErrorCode, $aErrors)) {
+                $sErrorType = $aErrors[$iErrorCode];
+                $bRetval = true;
+            }
+            $aBt= debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
+            $x = sizeof($aBt) -1;
+            $iSize = $x < 0 ? 0 : ($x <= 2 ? $x : 2);
+            $sEntry = date('c').' '.'['.$sErrorType.'] '.str_replace(dirname(__DIR__), '', $sErrorFile).':['.$iErrorLine.'] '
+                    . ' from '.str_replace(dirname(__DIR__), '', $aBt[$iSize]['file']).':['.$aBt[$iSize]['line'].'] '
+                    . (isset($aBt[$iSize]['class']) ? $aBt[$iSize]['class'].$aBt[$iSize]['type'] : '').$aBt[$iSize]['function'].' '
+                    . '"'.$sErrorText.'"'.PHP_EOL;
+            file_put_contents($sErrorLogFile, $sEntry, FILE_APPEND);
+        }
     }
-    $aBt= debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
-    $x = sizeof($aBt) -1;
-    $iSize = $x < 0 ? 0 : ($x <= 2 ? $x : 2);
-    $sEntry = date('c').' '.'['.$sErrorType.'] '.str_replace(dirname(__DIR__), '', $sErrorFile).':['.$iErrorLine.'] '
-            . ' from '.str_replace(dirname(__DIR__), '', $aBt[$iSize]['file']).':['.$aBt[$iSize]['line'].'] '
-            . (isset($aBt[$iSize]['class']) ? $aBt[$iSize]['class'].$aBt[$iSize]['type'] : '').$aBt[$iSize]['function'].' '
-            . '"'.$sErrorText.'"'.PHP_EOL;
-    file_put_contents($sErrorLogFile, $sEntry, FILE_APPEND);
     return $bRetval;
 }
 /**
@@ -279,16 +279,18 @@
         include __DIR__.'/CoreAutoloader.php';
     }
     \bin\CoreAutoloader::doRegister(dirname(__DIR__));
-    \bin\CoreAutoloader::addNamespace([ // add several needed namespaces
+    \bin\CoreAutoloader::addNamespace([ // add several needed namespaces->folder translations
     //  Namespace               Directory
-        'bin'                => 'framework',
-        'addon'              => 'modules',
-        'vendor'             => 'include',
-        'vendor\\jscalendar' => 'include/jscalendar',
-        'bin\\db'            => 'framework/db',
-        'bin\\security'      => 'framework',
-        'bin\\interfaces'    => 'framework',
-        'api'                => 'framework/api',
+        'bin'                    => 'framework',
+        'addon'                  => 'modules',
+        'vendor'                 => 'include',
+        'vendor\\jscalendar'     => 'include/jscalendar',
+        'bin\\db'                => 'framework/db',
+        'bin\\requester'         => 'framework',
+        'bin\\requester\\filter' => 'framework',
+        'bin\\security'          => 'framework',
+        'bin\\interfaces'        => 'framework',
+        'api'                    => 'framework/api',
     ]);
 
     // *** initialize Exception handling
@@ -319,7 +321,7 @@
     $aCfg = initReadSetupFile();
     initSetInstallWbConstants($aCfg);
 // activate requester --------------------------------------------------------------------
-    $oRequest = \bin\HttpRequester();
+    $oRequest = new \bin\requester\HttpRequester();
 // ---------------------------
 // get Database connection data from configuration
     defined('ADMIN_DIRECTORY') ? '' : define('ADMIN_DIRECTORY', 'admin');
@@ -437,6 +439,13 @@
             $sLang = strtoupper($aMatches[1]);
             define('LANGUAGE', $slang);
             $_SESSION['LANGUAGE'] = $sLang;
+//            // strtoupper() is deprecated and for backward compatibility only!
+//            $sLang = strtoupper($oRequest->getParam('lang', FILTER_CALLBACK, [
+//                new \bin\requester\filter\CoreFilters(['default'=>'en', 'seperator'=>'-']),
+//                'FILTER_LANGUAGE_CODE'
+//            ]));
+//            define('LANGUAGE', $slang);
+//            $_SESSION['LANGUAGE'] = $sLang;
         }
         $sCachePath = dirname(__DIR__).'/temp/cache/';
         if (!file_exists($sCachePath)) {
