Index: branches/main/admin/interface/version.php
===================================================================
--- branches/main/admin/interface/version.php	(revision 20)
+++ branches/main/admin/interface/version.php	(revision 21)
@@ -48,7 +48,7 @@
 if (!defined('VERSION_LOADED')) {
     $sInfo = '
         VERSION  = "2.10.1-dev"
-        REVISION = "20"
+        REVISION = "21"
         SP       = ""
     ';
     foreach (parse_ini_string($sInfo) as $item=>$value) {
Index: branches/main/modules/output_filter/OutputFilterApi.php
===================================================================
--- branches/main/modules/output_filter/OutputFilterApi.php	(revision 20)
+++ branches/main/modules/output_filter/OutputFilterApi.php	(revision 21)
@@ -37,23 +37,37 @@
  * @param   string $sContent  content to apply filters
  * @return  string
  */
-    function OutputFilterApi($mFilters, $sContent)
+    function OutputFilterApi($mFilters, $sContent, array $aOptions = [])
     {
         if (!is_array($mFilters)) {
             $mFilters = preg_split('/\s*?[,;| +]\s*?/', $mFilters, -1, PREG_SPLIT_NO_EMPTY);
         }
+        $oDb = $GLOBALS['database'];
+        $aFilterSettings = getOutputFilterSettings();
         foreach ($mFilters as $sFilter) {
             $aTmp = preg_split('/\?/', $sFilter, 2, PREG_SPLIT_NO_EMPTY);
             $sFilterName = $aTmp[0];
+            if (!preg_match('/^[A-Z][A-Za-z0-9]+$/s', $sFilterName)) { continue; }
             $sOptions = (isset($aTmp[1])) ? $aTmp[1] : '';
-            if (!preg_match('/^[A-Z][A-Za-z0-9]+$/s', $sFilterName)) { continue; }
-            $sFilterFile = __DIR__.'/filters/'.'filter'.$sFilterName.'.php';
-            $sFilterFunc = 'doFilter'.$sFilterName;
-            if (is_readable($sFilterFile)) {
-                if (!function_exists($sFilterFunc)) {
-                    require($sFilterFile);
+            $sFilterClass = 'addon\\'.basename(__DIR__).'\\filters\\'.$sFilterName.'\\Filter';
+            if (class_exists($sFilterClass)) {
+                if ($aFilterSettings[$sFilterName]) {
+                    if ($sOptions) {
+                        parse_str($sOptions, $aTmp);
+                        $aOptions = array_merge($aTmp, $aOptions);
+                    }
+                    $sContent = (new $sFilterClass($oDb, $aFilterSettings, $aOptions))
+                                ->execute($sContent);
                 }
-                $sContent = $sFilterFunc($sContent, $sOptions);
+            } else {
+                $sFilterFile = __DIR__.'/filters/'.'filter'.$sFilterName.'.php';
+                $sFilterFunc = 'doFilter'.$sFilterName;
+                if (is_readable($sFilterFile)) {
+                    if (!function_exists($sFilterFunc)) {
+                        require($sFilterFile);
+                    }
+                    $sContent = $sFilterFunc($sContent, $sOptions);
+                }
             }
         }
         return $sContent;
@@ -82,8 +96,8 @@
             }
         }
         $aSettings['OutputFilterMode'] = 0;
-        $aSettings['OutputFilterMode'] |= ((int)$aSettings['email_filter'] * pow(2, 0));  // n | 2^0
-        $aSettings['OutputFilterMode'] |= ((int)$aSettings['mailto_filter'] * pow(2, 1)); // n | 2^1
+        $aSettings['OutputFilterMode'] |= ((int)$aSettings['email_filter'] * (2**0));  // n | 2^0
+        $aSettings['OutputFilterMode'] |= ((int)$aSettings['mailto_filter'] * (2**1)); // n | 2^1
     // return array with filter settings
         return $aSettings;
     }
