--- form_controller.module.orig	2009-11-19 12:42:39.000000000 +0100
+++ form_controller.module	2009-12-07 12:47:51.928125000 +0100
@@ -32,11 +32,12 @@ function form_controller_menu() {
  * Implements hook_form_alter().
  */
 function form_controller_form_alter(&$form, &$form_state, $form_id) {
-  static $implementations;
-  if (!isset($implementations)) {
-    $implementations = (bool) module_implements('form_controller_info');
+  //Cache all the form_controller_info
+  global $form_controller_alterations;
+  if (!isset($form_controller_alterations)) {
+    $form_controller_alterations = module_invoke_all('form_controller_info');
   }
-  if ($form_id == 'form_controller_form' || !$implementations) {
+  if ($form_id == 'form_controller_form' || !isset($form_controller_alterations)) {
     return;
   }
   // @todo This breaks form submissions in D6, so we have to inline the code :(
@@ -169,8 +170,9 @@ function form_controller_process_form(&$
   );
   $form_state['form_controller'] = $context;
 
-  // @todo Cache this.
-  foreach (module_invoke_all('form_controller_info') as $name => $info) {
+  //Use cached form_controller_info
+  global $form_controller_alterations;
+  foreach ($form_controller_alterations as $name => $info) {
     if (!empty($info['process callback']) && function_exists($info['process callback'])) {
       $function = $info['process callback'];
       $function($element, $form_state, $form_id, $form_elements);
