diff --git a/includes/rules.core.inc b/includes/rules.core.inc
index 24d85c6..1c800f7 100644
--- a/includes/rules.core.inc
+++ b/includes/rules.core.inc
@@ -122,7 +122,7 @@ class RulesEntityController extends EntityAPIControllerExportable {
     // Create an empty configuration, re-set basic keys and import.
     $config = rules_plugin_factory($export['PLUGIN']);
     $config->name = $name;
-    foreach (array('label', 'active', 'weight', 'tags', 'access_exposed', 'owner') as $key) {
+    foreach (array('label', 'description', 'active', 'weight', 'tags', 'access_exposed', 'owner') as $key) {
       if (isset($export[strtoupper($key)])) {
         $config->$key = $export[strtoupper($key)];
       }
@@ -425,6 +425,7 @@ abstract class RulesPlugin extends RulesExtendable {
   public $id = NULL;
   public $weight = 0;
   public $name = NULL;
+  public $description = NULL;
 
   /**
    * An array of settings for this element.
@@ -1401,6 +1402,9 @@ abstract class RulesPlugin extends RulesExtendable {
     if (!empty($this->label) && $this->label != t('unlabeled')) {
       $export_cfg[$this->name]['LABEL'] = $this->label;
     }
+    if (!empty($this->description)) {
+      $export_cfg[$this->name]['DESCRIPTION'] = $this->description;
+    }
     $export_cfg[$this->name]['PLUGIN'] = $this->plugin();
     if (!empty($this->weight)) {
       $export_cfg[$this->name]['WEIGHT'] = $this->weight;
diff --git a/rules.install b/rules.install
index 1a81d2f..aec1aed 100644
--- a/rules.install
+++ b/rules.install
@@ -46,6 +46,12 @@ function rules_schema() {
         'description' => 'The label of the configuration.',
         'default' => 'unlabeled',
       ),
+      'description' => array(
+        'description' => 'A brief description of the configuration.',
+        'type' => 'text',
+        'not null' => FALSE,
+        'size' => 'medium',
+      ),
      'plugin' => array(
         'type' => 'varchar',
         'length' => 127,
@@ -500,3 +506,18 @@ function rules_update_7213() {
     }
   }
 }
+
+/**
+ * Adds a description field to the rules config.
+ */
+function rules_update_7214() {
+  // Create a description column.
+  if (!db_field_exists('rules_config', 'description')) {
+    db_add_field('rules_config', 'description', array(
+      'description' => 'A brief description of the configuration.',
+      'type' => 'text',
+      'not null' => FALSE,
+      'size' => 'medium',
+    ));
+  }
+}
diff --git a/ui/ui.core.inc b/ui/ui.core.inc
index a51c6af..1e54b6e 100644
--- a/ui/ui.core.inc
+++ b/ui/ui.core.inc
@@ -420,6 +420,15 @@ class RulesPluginUI extends FacesExtender implements RulesPluginUIInterface {
       '#required' => TRUE,
       '#weight' => -5,
     );
+    $form['settings']['description'] = array(
+      '#type' => 'textarea',
+      '#title' => t('Description'),
+      '#default_value' => $this->element->description,
+      '#required' => FALSE,
+      '#weight' => 6,
+      '#description' => t('An administrative description of the rule.'),
+    );
+
     // @todo: For Drupal 8 use "owner" for generating machine names and
     // module only for the modules providing default configurations.
     if (!empty($this->element->module) && !empty($this->element->name) && $this->element->module == 'rules' && strpos($this->element->name, 'rules_') === 0) {
@@ -566,6 +575,7 @@ class RulesPluginUI extends FacesExtender implements RulesPluginUIInterface {
   public function settingsFormExtractValues($form, &$form_state) {
     $form_values = RulesPluginUI::getFormStateValues($form['settings'], $form_state);
     $this->element->label = $form_values['label'];
+    $this->element->description = $form_values['description'];
     // If the name was changed we have to redirect to the URL that contains
     // the new name, instead of rebuilding on the old URL with the old name
     if ($form['settings']['name']['#default_value'] != $form_values['name']) {
@@ -704,6 +714,15 @@ class RulesPluginUI extends FacesExtender implements RulesPluginUIInterface {
     $content['description'] = array(
       '#prefix' => '<div class="description">',
     );
+    if (!empty($this->element->description)) {
+      $content['description']['description'] = array(
+        '#caption' => t('Description'),
+        '#theme' => 'rules_content_group',
+        'description' => array(
+          '#markup' => check_plain($this->element->description),
+        ),
+      );
+    }
     $content['description']['parameter'] = array(
       '#caption' => t('Parameter'),
       '#theme' => 'rules_content_group',
