Index: /trunk/optimizer.c
===================================================================
--- /trunk/optimizer.c	(revision 476)
+++ /trunk/optimizer.c	(revision 477)
@@ -7,4 +7,5 @@
 /* the "vector" stack */
 #include "stack.h"
+#include "xcache_globals.h"
 
 #ifdef DEBUG
@@ -19,5 +20,4 @@
 #	define XCACHE_IS_CV 16
 #endif
-#define optimized_flag done_pass_two
 
 typedef int bbid_t;
@@ -516,10 +516,4 @@
 	}
 
-	/* don't optimize twice */
-	if (op_array->optimized_flag) {
-		return 0;
-	}
-	op_array->optimized_flag = 1;
-
 #ifdef DEBUG
 #	if 0
@@ -557,27 +551,10 @@
 }
 /* }}} */
-static int xc_clear_flag_optimized(zend_op_array *op_array TSRMLS_DC) /* {{{ */
-{
-	op_array->done_pass_two = 0;
-	return 0;
-}
-/* }}} */
-void xc_optimize(zend_op_array *op_array TSRMLS_DC) /* {{{ */
-{
-	xc_compile_result_t cr;
-
-	if (!op_array) {
-		return;
-	}
-
-	xc_compile_result_init_cur(&cr, op_array TSRMLS_CC);
-
-	xc_apply_op_array(&cr, (apply_func_t) xc_undo_pass_two TSRMLS_CC);
-	/* op_array->done_pass_two is now used as if it's op_array->flag_optimized */
-	xc_apply_op_array(&cr, (apply_func_t) xc_optimize_op_array TSRMLS_CC);
-	xc_apply_op_array(&cr, (apply_func_t) xc_clear_flag_optimized TSRMLS_CC);
-	xc_apply_op_array(&cr, (apply_func_t) xc_redo_pass_two TSRMLS_CC);
-
-	xc_compile_result_free(&cr);
-}
-/* }}} */
+void xc_optimizer_op_array_handler(zend_op_array *op_array) /* {{{ */
+{
+	TSRMLS_FETCH();
+	if (XG(optimizer)) {
+		xc_optimize_op_array(op_array TSRMLS_CC);
+	}
+}
+/* }}} */
Index: /trunk/optimizer.h
===================================================================
--- /trunk/optimizer.h	(revision 476)
+++ /trunk/optimizer.h	(revision 477)
@@ -2,3 +2,3 @@
 #include "xcache.h"
 
-void xc_optimize(zend_op_array *op_array TSRMLS_DC);
+void xc_optimizer_op_array_handler(zend_op_array *op_array);
Index: /trunk/xcache.c
===================================================================
--- /trunk/xcache.c	(revision 476)
+++ /trunk/xcache.c	(revision 477)
@@ -1000,9 +1000,4 @@
 	}
 
-#ifdef HAVE_XCACHE_OPTIMIZER
-	if (XG(optimizer)) {
-		xc_optimize(op_array TSRMLS_CC);
-	}
-#endif
 	/* }}} */
 	/* {{{ prepare */
@@ -1200,9 +1195,4 @@
 	if (!XG(cacher)) {
 		op_array = old_compile_file(h, type TSRMLS_CC);
-#ifdef HAVE_XCACHE_OPTIMIZER
-		if (XG(optimizer)) {
-			xc_optimize(op_array TSRMLS_CC);
-		}
-#endif
 		return op_array;
 	}
@@ -3051,5 +3041,9 @@
 	NULL,           /* deactivate_func_t */
 	NULL,           /* message_handler_func_t */
+#ifdef HAVE_XCACHE_OPTIMIZER
+	xc_optimizer_op_array_handler,
+#else
 	NULL,           /* op_array_handler_func_t */
+#endif
 	xcache_statement_handler,
 	xcache_fcall_begin_handler,
