diff --git a/includes/rules.plugins.inc b/includes/rules.plugins.inc
index 504d556..fbadab8 100644
--- a/includes/rules.plugins.inc
+++ b/includes/rules.plugins.inc
@@ -542,7 +542,8 @@ class RulesLoop extends RulesActionContainer {
       'type' => 'list',
       'restriction' => 'selector',
       'label' => t('List'),
-      'description' => t('The list to loop over.'),
+      'description' => t('The list to loop over. The loop will step through each item in the list, allowing further actions on them. See <a href="@url"> the online handbook</a> for more information on how to use loops.',
+        array('@url' => rules_external_help('loops'))),
     );
     return $info;
   }
diff --git a/modules/system.eval.inc b/modules/system.eval.inc
index 7af619e..a8f8c54 100644
--- a/modules/system.eval.inc
+++ b/modules/system.eval.inc
@@ -195,6 +195,8 @@ class RulesTokenEvaluator extends RulesDataInputEvaluator {
       '#title' => t('Replacement patterns'),
       '#collapsible' => TRUE,
       '#collapsed' => TRUE,
+      '#description' => t('Note that token replacements containing chained objects – such as [node:author:uid] – are not listed here, but are still available. The <em>data selection</em> input mode may help you find more complex replacement patterns. See <a href="@url">the online documentation</a> for more information about complex replacement patterns.',
+        array('@url' => rules_external_help('chained-tokens'))),
     );
     $token_info = token_info();
     foreach ($var_info as $name => $info) {
diff --git a/rules.module b/rules.module
index c2458ec..6e9a3da 100644
--- a/rules.module
+++ b/rules.module
@@ -1247,3 +1247,57 @@ function rules_menu() {
   );
   return $items;
 }
+
+/**
+ * Helper function to keep track of external documentation pages for Rules.
+ *
+ * @param $topic
+ *   The topic key for used for identifying help pages.
+ *
+ * @return
+ *   Either a URL for the given page, or the full list of external help pages.
+ */
+function rules_external_help($topic = NULL) {
+  $help = array(
+    'rules' =>                'http://drupal.org/node/298480',
+    'terminology' =>          'http://drupal.org/node/1299990',
+    'condition-components' => 'http://drupal.org/node/1300034',
+    'data-selection' =>       'http://drupal.org/node/1300042',
+    'chained-tokens' =>       'http://drupal.org/node/1300042',
+    'loops' =>                'http://drupal.org/node/1300058',
+    'components' =>           'http://drupal.org/node/1300024',
+    'component-types' =>      'http://drupal.org/node/1300024',
+    'variables' =>            'http://drupal.org/node/1300024',
+    'scheduler' =>            'http://drupal.org/node/1300068',
+    'coding' =>               'http://drupal.org/node/878720',
+  );
+
+  if (isset($topic)) {
+    return isset($help[$topic]) ? $help[$topic] : FALSE;
+  }
+  return $help;
+}
+
+/**
+ * Implements hook_help().
+ */
+function rules_help($path, $arg) {
+  // Only enable the help if the admin module is active.
+  if ($path == 'admin/help#rules' && module_exists('rules_admin')) {
+
+    $output['header'] = array(
+      '#markup' => t('Rules documentation is kept online. Please use the links below for more information about Rules. Feel free to contribute to improving the online documentation!'),
+    );
+    // Build a list of essential Rules help pages, formatted as a bullet list.
+    $link_list['rules'] = l(t('Rules introduction'), rules_external_help('rules'));
+    $link_list['terminology'] = l(t('Rules terminology'), rules_external_help('terminology'));
+    $link_list['scheduler'] = l(t('Rules Scheduler'), rules_external_help('scheduler'));
+    $link_list['coding'] = l(t('Coding for Rules'), rules_external_help('coding'));
+
+    $output['topic-list'] = array(
+      '#markup' => theme('item_list', array('items' => $link_list)),
+    );
+    return render($output);
+  }
+}
+
diff --git a/rules_admin/rules_admin.inc b/rules_admin/rules_admin.inc
index 5a2ea4a..cbff2c5 100644
--- a/rules_admin/rules_admin.inc
+++ b/rules_admin/rules_admin.inc
@@ -29,6 +29,13 @@ function rules_admin_reaction_overview($form, &$form_state, $base_path) {
     $conditions['event'] = $event;
     $collapsed = FALSE;
   }
+  $form['help'] = array(
+    '#type' => 'markup',
+    '#markup' => t('Reaction rules, listed below, react on selected events on the site. Each reaction rule may fire any number of <em>actions</em>, and may have any number of <em>conditions</em> that must be met for the actions to be executed. You can also set up <a href="@url1">components</a> – stand-alone sets of Rules configuration that can be used in Rules and other parts of your site. See <a href="@url2">the online documentation</a> for an introduction on how to use Rules.',
+      array('@url1' => url('admin/config/workflow/rules/components'),
+            '@url2' => rules_external_help('rules'))),
+  );
+
   $form['filter'] = array(
     '#type' => 'fieldset',
     '#title' => t('Filter'),
@@ -95,6 +102,11 @@ function rules_admin_components_overview($form, &$form_state, $base_path) {
     $conditions['plugin'] = $plugin;
     $collapsed = FALSE;
   }
+  $form['help'] = array(
+    '#type' => 'markup',
+    '#markup' => t('Components are stand-alone sets of Rules configuration that can be used by Rules and other modules on your site. Components are for example useful if you want to use the same conditions, actions or rules in multiple places, or call them from your custom module. You may also export each component separately. See <a href="@url2">the online documentation</a> for more information about how to use components.',
+      array('@url' => rules_external_help('components'))),
+  );
   $form['filter'] = array(
     '#type' => 'fieldset',
     '#title' => t('Filter'),
@@ -245,7 +257,8 @@ function rules_admin_add_component($form, &$form_state, $base_path) {
     '#type' => 'select',
     '#title' => t('Component plugin'),
     '#options' => rules_admin_component_options(),
-    '#description' => t('Choose which kind of component to create.'),
+    '#description' => t('Choose which kind of component to create. Each component type is described in <a href="@url">the online documentation</a>.',
+      array('@url' => rules_external_help('component-types'))),
     '#weight' => -2,
     '#default_value' => isset($form_state['values']['plugin_name']) ? $form_state['values']['plugin_name'] : '',
   );
diff --git a/rules_admin/rules_admin.module b/rules_admin/rules_admin.module
index 7daae91..ca81879 100644
--- a/rules_admin/rules_admin.module
+++ b/rules_admin/rules_admin.module
@@ -103,3 +103,19 @@ function rules_admin_form_alter(&$form, &$form_state, $form_id) {
     $form['form_id']['#access'] = FALSE;
   }
 }
+
+/**
+ * Implements hook_system_info_alter().
+ *
+ * Adds configuration links for Rules and Rules Scheduler in the modules list.
+ * (This is done by the Rules UI module, without which there would be no
+ * configuration pages to visit.)
+ */
+function rules_admin_system_info_alter(&$info, $file, $type) {
+  if ($file->name == 'rules') {
+    $info['configure'] = 'admin/config/workflow/rules';
+  }
+  if ($file->name == 'rules_scheduler') {
+    $info['configure'] = 'admin/config/workflow/rules/schedule';
+  }
+}
diff --git a/rules_scheduler/rules_scheduler.rules.inc b/rules_scheduler/rules_scheduler.rules.inc
index 4ffd8a7..3a11404 100644
--- a/rules_scheduler/rules_scheduler.rules.inc
+++ b/rules_scheduler/rules_scheduler.rules.inc
@@ -23,6 +23,7 @@ function rules_scheduler_rules_action_info() {
         'label' => t('Component'),
         'options list' => 'rules_scheduler_component_options_list',
         'restriction' => 'input',
+        'description' => 'Select the component to schedule. Only components containing actions are available – no condition sets.',
       ),
       'date' => array(
         'type' => 'date',
@@ -31,7 +32,7 @@ function rules_scheduler_rules_action_info() {
       'identifier' => array(
         'type' => 'text',
         'label' => t('Identifier'),
-        'description' => t('User provided string to identify the task. Any existing tasks for this component with the same identifier will be replaced.'),
+        'description' => t('A string used for identifying this task. Any existing tasks for this component with the same identifier will be replaced.'),
         'optional' => TRUE,
       ),
       // Further needed parameter by the component are added during processing.
@@ -149,7 +150,9 @@ function rules_scheduler_action_schedule_validate(RulesPlugin $element) {
  * Help for the schedule action.
  */
 function rules_scheduler_action_schedule_help() {
-  return t("The evaluation of the component is going to be scheduled with the help of cron. Therefore make sure cron is configured correctly by checking your site's !status.", array('!status' => l('Status report', 'admin/reports/status'))) .' '. t('Note that the scheduling time accuracy depends on your configured cron interval.');
+  return t("Note that component evaluation is triggered by <em>cron</em> – make sure cron is configured correctly by checking your site's !status. The scheduling time accuracy depends on your configured cron interval. See <a href='@url'>the online documentation</a> for more information on how to schedule evaluation of components.",
+    array('!status' => l('Status report', 'admin/reports/status'),
+          '@url' => rules_external_help('scheduler')));
 }
 
 /**
diff --git a/ui/ui.core.inc b/ui/ui.core.inc
index 09bb20c..bc69ac4 100644
--- a/ui/ui.core.inc
+++ b/ui/ui.core.inc
@@ -434,12 +434,19 @@ class RulesPluginUI extends FacesExtender implements RulesPluginUIInterface {
       '#title' => t('Tags'),
       '#default_value' => isset($this->element->tags) ? drupal_implode_tags($this->element->tags) : '',
       '#autocomplete_path' => 'admin/config/workflow/rules/autocomplete_tags',
-      '#description' => t('Tags associated with this configuration. Enter a comma-separated list of words.'),
+      '#description' => t('Tags associated with this configuration, used for filtering in the admin interface. Separate multiple tags with commas.'),
     );
 
     // Show a form for editing variables for components.
     if (($plugin_info = $this->element->pluginInfo()) && !empty($plugin_info['component'])) {
-      $description = $this->element->hasStatus(ENTITY_IN_CODE) ? t('The variables used by the component. They can not be edited for configurations that are provided in code.') : t('Defines the variables the component uses. Variables can be used as <em>parameter</em>, so that the caller has to specify suiting arguments. Also, action components may <em>provide</em> some variables to the caller. For each variable you have to specify a certain data type, a label and a unique machine readable name containing only lowercase alphanumeric characters and underscores.');
+      if ($this->element->hasStatus(ENTITY_IN_CODE)) {
+        $description = t('The variables used by the component. They can not be edited for configurations that are provided in code.');
+      }
+      else {
+        $description = t('Variables are normally input <em>parameters</em> for the component – data that should be available for the component to act on. Additionaly, action components may <em>provide</em> variables back to the caller. Each variable must have a specified data type, a label and a unique machine readable name containing only lowercase alphanumeric characters and underscores. See <a href="@url">the online documentation</a> for more information about variables.',
+          array('@url' => rules_external_help('variables'))
+        );
+      }
       $form['settings']['vars'] = array(
         '#prefix' => '<div id="rules-component-variables">',
         '#suffix' => '</div>',
@@ -1034,7 +1041,11 @@ class RulesConditionContainerUI extends RulesContainerPluginUI {
         '#type' => 'container',
         '#id' => 'rules-plugin-add-help',
         'content' => array(
-          '#markup' => t('You are about to add a new @plugin to the @config-plugin %label.', array('@plugin' => $this->element->plugin(), '@config-plugin' => $config->plugin(), '%label' => $config->label())),
+          '#markup' => t('You are about to add a new @plugin to the @config-plugin %label. Use indentation to make conditions a part of this logic group. See <a href="@url">the online documentation</a> for more information on condition sets.',
+            array('@plugin' => $this->element->plugin(),
+                  '@config-plugin' => $config->plugin(),
+                  '%label' => $config->label(),
+                  '@url' => rules_external_help('condition-components'))),
         ),
       );
     }
diff --git a/ui/ui.data.inc b/ui/ui.data.inc
index 4f122f8..2ab87e6 100755
--- a/ui/ui.data.inc
+++ b/ui/ui.data.inc
@@ -65,6 +65,8 @@ class RulesDataUI {
       // Make the autocomplete textfield big enough so that it can display
       // descriptions without word wraps.
       '#size' => 75,
+      '#description' => t("The data selector helps you drill down into the data available to Rules. <em>To make entity fields appear in the data selector, you may have to use the condition 'entity has field' (or 'content is of type').</em> More useful tips about data selection is available in <a href='@url'>the online documentation</a>.",
+        array('@url' => rules_external_help('data-selection'))),
     );
     $form['help'] = array(
       '#theme' => 'rules_data_selector_help',
@@ -274,7 +276,9 @@ class RulesDataUIDate extends RulesDataUIText {
     $form[$name]['#element_validate'][] = 'rules_ui_element_date_validate';
     // Note that the date input evaluator takes care for parsing dates using
     // strtotime() into a timestamp, which is the internal date format.
-    $form[$name]['#description'] = t('The date in GMT. Format: %format or other values in GMT known by the PHP !strtotime function like "+1 day". Relative dates like "+1 day" or "now" relate to the evaluation time.', array('%format' => gmdate('Y-m-d H:i:s', time() + 86400), '!strtotime' => l('strtotime()', 'http://php.net/strtotime')));
+    $form[$name]['#description'] = t('The date in GMT. You may enter a fixed time (like %format) or any other values in GMT known by the PHP !strtotime function (like "+1 day"). Relative dates like "+1 day" or "now" relate to the evaluation time.',
+      array('%format' => gmdate('Y-m-d H:i:s', time() + 86400),
+            '!strtotime' => l('strtotime()', 'http://php.net/strtotime')));
 
     //TODO: Leverage the jquery datepicker+timepicker once a module providing
     //the timpeicker is available.
diff --git a/ui/ui.plugins.inc b/ui/ui.plugins.inc
index eb6fd45..bac9984 100755
--- a/ui/ui.plugins.inc
+++ b/ui/ui.plugins.inc
@@ -180,7 +180,7 @@ class RulesLoopUI extends RulesActionContainerUI {
     $form['item'] = array(
       '#type' => 'fieldset',
       '#title' => t('Current list item'),
-      '#description' => t('A variable which holds the current list item.'),
+      '#description' => t('The variable used for holding each list item in the loop. This variable will be available inside the loop only.'),
       '#tree' => TRUE,
     );
     $form['item']['label'] = array(
