--- checkbox_validate.module.orig	2009-02-03 20:50:50.968750000 +0100
+++ checkbox_validate.module	2009-05-27 14:47:51.640625000 +0200
@@ -2,60 +2,46 @@
 // $Id: checkbox_validate.module,v 1.2 2008/05/29 14:14:40 MegaGrunt Exp $
 
 /**
- * Implementation of hook_form_alter().
+ * @file
+ * Corrects display and behaviour of required checkboxes in all Drupal forms
  */
-function checkbox_validate_form_alter(&$form, $form_state, $form_id) {
-  $form = checkbox_validate_recurse($form);
-  return; 
+
+/*
+ * Implementation of hook_elements().
+ */
+function checkbox_validate_elements() {
+  return array(
+    'checkbox' => array(
+      '#process' => array('checkbox_validate_add_validation'),
+    ),
+  );
 }
 
 /**
- * Recurse through a form array to find required checkboxes
+ * Process function for checkbox form elements.
  */
-function checkbox_validate_recurse($form_item) {
-  if (!is_array($form_item)) return;
-
-  while (list($key, $value) = each($form_item)) {
-
-    if (strpos($key, '#') === 0) {
-
-      if (isset($form_item['#type']) && $form_item['#type'] == 'checkbox' && isset($form_item['#required']) && $form_item['#required'] == TRUE) {
-         
-        $form_item['#element_validate'] = array('checkbox_validate_validation');
-        $form_item['#pre_render'][] = 'checkbox_validate_add_required_symbol'; 
-        return $form_item;
-      }
-      
-    }
-    else {
-
-      $form_item[$key] = checkbox_validate_recurse($value);
-    }
+function checkbox_validate_add_validation($element) {
+  if (isset($element['#required']) && $element['#required'] == TRUE) {
+    $element['#element_validate'] = array('checkbox_validate_validation');
+    $element['#pre_render'][] = 'checkbox_validate_add_required_symbol';
   }
-
-  return $form_item;
-}     
-
-/* add required symbol here in this pre_render function 
-   so it doresn't display on error messages  */
-function checkbox_validate_add_required_symbol($form) { 
-	$form['#title'] .= ' <span class="form-required" title="' . t('This field is required.') . '">*</span>';
-	return $form;
+  return $element;
 }
 
-/* validate a required checkbox */
-function checkbox_validate_validation($element) { 
-  if (empty($element['#value'])) form_error($element, t('!title field is required.', array('!title' => filter_xss_admin(($element['#title'])))));
-  return;
+/**
+ * add required symbol here in this pre_render function
+ * so it doresn't display on error messages
+ */
+function checkbox_validate_add_required_symbol($form) {
+  $form['#title'] .= ' <span class="form-required" title="' . t('This field is required.') . '">*</span>';
+  return $form;
 }
 
 /**
- * Implementation of hook_theme().
+ * Validate a required checkbox.
  */
-function checkbox_validate_theme() {
-  return array(
-    'checkbox_validate_required' => array(
-      'arguments' => array(),
-    ),
-  );
+function checkbox_validate_validation($element) {
+  if (empty($element['#value'])) {
+    form_error($element, t('!title field is required.', array('!title' => filter_xss_admin($element['#title']))));
+  }
 }
