diff -urp rules/rules.admin.inc rules/rules.admin.inc
--- rules/rules.admin.inc	2008-11-26 18:53:31.000000000 +0200
+++ rules/rules.admin.inc	2008-12-12 18:50:58.000000000 +0200
@@ -320,18 +320,64 @@ function rules_admin_form_add(&$form_sta
   exit;
 }
 
+function theme_rules_unsatisfied_items($grouped_rules, $items) {
+  $output = '<dl>';
+  foreach ($grouped_rules as $group => $value) {
+    $fieldset = array(
+      '#type' => 'fieldset',
+      '#title' => format_plural(count($grouped_rules), '@group module (1 item is hidden)', '@group module (@count items are hidden)', array('@group' => $items[$group]['module'])),
+      '#collapsible' => FALSE,
+    );
+    $output .= '<dt>'. check_plain($items[$group]['label']) .'</dt>';
+    $output .= '<dd><em>'. format_plural(count($items[$group]['unsatisfied arguments']), 'Unavailable argument: @arguments', 'Unavailable arguments: @arguments', array('@arguments' => join(', ', $items[$group]['unsatisfied arguments']))) .'</em></dd>';
+  }
+  $output .= '</dl>';
+  $fieldset['items'] = array(
+    '#type' => 'markup',
+    '#value' => $output,
+  );
+  return drupal_render($fieldset);
+}
+
+function theme_rules_admin_unsatisfied_arguments($element) {
+  $output = '';
+  $output .= '<div class="admin-panel-missing-arguments">';
+  foreach (rules_admin_get_grouped_labels($element['#unsatisfied_grouped_options']) as $grouped_rules) {
+      $output .= theme('rules_unsatisfied_items', $grouped_rules, $element['#unsatisfied_grouped_options']);
+  }
+  $output .= '</div>';
+  return $output;
+}
+
 /**
  * Returns the form for the first action add page
  */
 function rules_admin_form_add_action(&$form_state, &$element) {
   $vars = $form_state['proxy']->get_available_variables();
-  $actions = rules_admin_filter_info($vars, rules_get_actions());
+  $all_actions = rules_get_actions();
+  $satisfied_actions = rules_admin_filter_info($vars, $all_actions);
+  $unsatisfied_actions = array_diff_assoc($all_actions, $satisfied_actions);
   $form['name'] = array(
     '#type' => 'select',
     '#title' => t('Select an action to add'),
-    '#options' => rules_admin_get_grouped_labels($actions),
+    '#options' => rules_admin_get_grouped_labels($satisfied_actions),
     '#required' => TRUE,
   );
+  if (!empty($unsatisfied_actions)){
+    // Hold all the actions that are disabled because argument(s) are missing.
+    $form['unsatisfied'] = array(
+      '#type' => 'fieldset',
+      '#title' => format_plural(count($unsatisfied_actions), '1 action item is hidden', '@count action items are hidden'),
+      '#description' => t("The following items aren't available in this context because they require arguments that don't exist in your rule. If you want to use any of these items, you must first add some action that loads arguments of this kind, or have an event that passes the required arguments."),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+    );
+    $form['unsatisfied']['items'] = array(
+      '#type' => 'item',
+      '#unsatisfied_grouped_options' => $unsatisfied_actions,
+      '#theme' => 'rules_admin_unsatisfied_arguments',
+    );
+  }
   $form['submit'] = array(
     '#type' => 'submit',
     '#weight' => 10,
@@ -348,13 +394,30 @@ function rules_admin_form_add_condition(
 
   if (!isset($parent['#type']) || isset($parent['#logical_op']) && $parent['#logical_op']) {
     $vars = $form_state['proxy']->get_available_variables(0);
-    $conditions = rules_admin_filter_info($vars, rules_get_conditions());
+    $all_conditions = rules_get_conditions();
+    $satisfied_conditions = rules_admin_filter_info($vars, $all_conditions);
+    $unsatisfied_conditions = array_diff_assoc($all_conditions, $satisfied_conditions);
     $form['name'] = array(
       '#type' => 'select',
       '#title' => t('Select the condition to add'),
-      '#options' => rules_admin_get_grouped_labels($conditions),
+      '#options' => rules_admin_get_grouped_labels($satisfied_conditions),
       '#required' => TRUE,
     );
+    if (!empty($unsatisfied_conditions)){
+    // Hold all the actions that are disabled because argument(s) are missing.
+    $form['unsatisfied'] = array(
+      '#type' => 'fieldset',
+      '#title' => format_plural(count($unsatisfied_conditions), '1 condition item is hidden', '@count condition items are hidden'),
+      '#description' => t("The following items aren't available in this context because they require arguments that don't exist in your rule. If you want to use any of these items, you must first add some action that loads arguments of this kind, or have an event that passes the required arguments."),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+    );
+    $form['unsatisfied']['items'] = array(
+      '#type' => 'item',
+      '#unsatisfied_grouped_options' => $unsatisfied_conditions,
+      '#theme' => 'rules_admin_unsatisfied_arguments',
+    );
+  }
     $form['submit'] = array(
       '#type' => 'submit',
       '#weight' => 10,
@@ -1039,20 +1102,25 @@ function _rules_admin_element_is_logical
 
 /**
  * Filters the info about elements (actions, conditions), so that only elements
- * compatible with the given variables are kept, which means suiting variables for all arguments
- * are available, so that the action/condition can be configured
+ * compatible with the given variables are kept, which means suiting variables 
+ * for all arguments are available, so that the action/condition can be 
+ * configured. Additionally, arguments having no suiting variables are recorded 
+ * in the 'unsatisfied arguments' slot. 
  */
-function rules_admin_filter_info($variables, $infos) {
+function rules_admin_filter_info($variables, &$infos) {
   $filtered = array();
   foreach ($infos as $key => $info) {
     if (isset($info['arguments']) && is_array($info['arguments'])) {
       foreach ($info['arguments'] as $name => $argument_info) {
         if (!rules_admin_argument_satisifable($argument_info, $variables)) {
-          // Skip this element
-          continue 2;
+          // Get the unsatisfied arguments.
+          $infos[$key] += array('unsatisfied arguments' => array());
+          $infos[$key]['unsatisfied arguments'][$name] = $argument_info['label'];
         }
       }
-      $filtered[$key] = $info;
+      if (empty($infos[$key]['unsatisfied arguments'])) {
+        $filtered[$key] = $info;
+      }      
     }
     else {
       $filtered[$key] = $info;
diff -urp rules/rules.module rules/rules.module
--- rules/rules.module	2008-10-03 13:21:04.000000000 +0300
+++ rules/rules.module	2008-12-12 18:34:16.000000000 +0200
@@ -283,6 +283,12 @@ function rules_theme() {
     'arguments' => array('elements' => NULL),
     'file' => 'rules.admin_sets.inc'
   );
+  $items['rules_admin_unsatisfied_arguments'] = array(
+    'arguments' => array('grouped_rules' => NULL, 'element' => NULL),
+  );  
+  $items['rules_unsatisfied_items'] = array(
+    'arguments' => array('items' => array()),
+  );
   return $items;
 }
 
