--- sites/all/modules/ckeditor/includes/ckeditor.page.inc	2011-09-13 20:35:30.000000000 +0100
+++ sites/all/modules/ckeditor/includes/ckeditor.page.inc	2011-09-13 20:37:28.963492000 +0100
@@ -191,16 +191,24 @@ function ckeditor_filter_xss() {
     if (!is_string($module_delta)) {
       continue;
     }
-    $module = strtok($module_delta, "/");
-    $delta = strtok("/");
-    $format = strtok("/");
+    $filter = new stdClass();
+    $filter->module = strtok($module_delta, "/");
+    $filter->delta = strtok("/");
+    $filter->format = strtok("/");

-    if (!module_hook($module, 'filter')) {
+    if (!module_hook($filter->module, 'filter')) {
       continue;
     }
+    $filters_to_apply[] = $filter;
+  }
+
+  foreach ((array) $filters_to_apply as $filter) {
+    $text = module_invoke($filter->module, 'filter', 'prepare', $filter->delta, $filter->format, $text);
+  }

+  foreach ((array) $filters_to_apply as $filter) {
     //built-in filter module, a special case where we would like to strip XSS and nothing more
-    if ($module == 'filter' && $delta == 0) {
+    if ($filter->module == 'filter' && $filter->delta == 0) {
       preg_match_all("|</?([a-z][a-z0-9]*)(?:\b[^>]*)>|i", $text, $matches);
       if ($matches[1]) {
         $tags = array_unique($matches[1]);
@@ -208,7 +216,7 @@ function ckeditor_filter_xss() {
       }
     }
     else {
-      $text = module_invoke($module, 'filter', 'process', $delta, $format, $text);
+      $text = module_invoke($filter->module, 'filter', 'process', $filter->delta, $filter->format, $text);
     }
   }

@@ -216,4 +224,4 @@ function ckeditor_filter_xss() {

   echo $text;
   exit;
-}
+}
\ No newline at end of file
