Index: rules/rules.export.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/rules/rules/Attic/rules.export.inc,v
retrieving revision 1.1.2.11
diff -u -p -r1.1.2.11 rules.export.inc
--- rules/rules.export.inc	5 Aug 2010 14:51:41 -0000	1.1.2.11
+++ rules/rules.export.inc	29 Sep 2010 12:04:31 -0000
@@ -58,24 +58,6 @@ function rules_item_rule_export($rule_na
     if (empty($rule['#categories']) || !in_array($module, $rule['#categories'])) {
       $rule['#categories'][$module] = $module;
     }
-
-    // We increase the counter in any case. As already renamed rules are passed
-    // in first, this makes sure to not overwrite the names of those even if
-    // they aren't saved yet.
-    $counter++;
-
-    if (strpos($rule_name, $module) !== 0) {
-      // Make sure the name isn't already taken.
-      $rules = rules_get_configured_items('rules');
-      while (isset($rules[$module .'_'. $counter])) {
-        $counter++;
-      }
-
-      // Rename the rule.
-      $export['rules'][$module .'_'. $counter] = $rule;
-      // Unset the non-prefixed item.
-      unset($export['rules'][$rule_name]);
-    }
   }
 }
 
Index: rules_admin/rules_admin.export.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/rules/rules_admin/Attic/rules_admin.export.inc,v
retrieving revision 1.1.2.9
diff -u -p -r1.1.2.9 rules_admin.export.inc
--- rules_admin/rules_admin.export.inc	25 Aug 2009 13:01:03 -0000	1.1.2.9
+++ rules_admin/rules_admin.export.inc	29 Sep 2010 12:04:32 -0000
@@ -62,10 +62,6 @@ function rules_item_rule_import(&$name, 
     }
   }
   if (isset($rule['#status']) && $rule['#status'] == 'custom' && (!isset($rules[$name]) || $rules[$name]['#label'] != $rule['#label'] || $rules[$name]['#set'] != $rule['#set'])) {
-    if (strpos($name, 'rules_') === 0) {
-      // Generate a new unique name for this rule, but only if it's "our rule".
-      $name = _rules_admin_rule_get_new_unique_name();
-    }
     $rule['#status'] = 'custom';
   }
   rules_import_hook($rule);
Index: rules_admin/rules_admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/rules/rules_admin/Attic/rules_admin.inc,v
retrieving revision 1.1.2.13
diff -u -p -r1.1.2.13 rules_admin.inc
--- rules_admin/rules_admin.inc	2 Nov 2009 11:34:33 -0000	1.1.2.13
+++ rules_admin/rules_admin.inc	29 Sep 2010 12:04:32 -0000
@@ -220,16 +220,6 @@ function rules_admin_get_categories($ite
 }
 
 /**
- * Gets an unique name for a newly added rule.
- */
-function _rules_admin_rule_get_new_unique_name() {
-  $id = variable_get('rules_counter', 0);
-  $id++;
-  variable_set('rules_counter', $id);
-  return 'rules_'. $id;
-}
-
-/**
  * Gets the label for the info of the given element by apply label callbacks.
  * Note that this is also used for argument infos.
  *
Index: rules_admin/rules_admin.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/rules/rules_admin/Attic/rules_admin.js,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 rules_admin.js
--- rules_admin/rules_admin.js	28 Aug 2009 16:37:49 -0000	1.1.2.2
+++ rules_admin/rules_admin.js	29 Sep 2010 12:04:32 -0000
@@ -13,3 +13,30 @@ Drupal.behaviors.RulesAdminSetAddArg = f
     });
   });
 };
+
+Drupal.behaviors.RulesAdminMachineName = function (context) {
+  // Add rule form machine-readable JS
+  $('#edit-label').addClass('processed').after(' <small class="rules-name-suffix">&nbsp;</small>');
+
+    if ($('#edit-label').val() === $('#edit-label').val().toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/_+/g, '_') || $('#edit-label').val() === '') {
+      $('#edit-name').parents('.form-item').hide();
+      
+      $('#edit-label').keyup(function() {
+        var machine = $(this).val().toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/_+/g, '_');
+        if (machine !== '_' && machine !== '') {
+          $('#edit-name').val(machine);
+          $('.rules-name-suffix').empty().append(' Machine name: rules_' + machine + ' [').append($('<a href="#">'+ Drupal.t('Edit') +'</a>').click(function() {
+            $('#edit-name').parents('.form-item').show();
+            $('.rules-name-suffix').hide();
+            $('#edit-label').unbind('keyup');
+            return false;
+          })).append(']');
+        }
+        else {
+          $('#edit-name').val(machine);
+          $('.rules-name-suffix').text('');
+        }
+      });
+      $('#edit-label').keyup();
+    }
+}
Index: rules_admin/rules_admin.rule_forms.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/rules/rules_admin/Attic/rules_admin.rule_forms.inc,v
retrieving revision 1.1.2.9
diff -u -p -r1.1.2.9 rules_admin.rule_forms.inc
--- rules_admin/rules_admin.rule_forms.inc	2 Nov 2009 13:34:46 -0000	1.1.2.9
+++ rules_admin/rules_admin.rule_forms.inc	29 Sep 2010 12:04:32 -0000
@@ -72,12 +72,29 @@ function rules_admin_check_token() {
  * Returns the add rule form
  */
 function rules_admin_form_add_rule(&$form_state, $set_info = FALSE) {
-
+  drupal_add_js(drupal_get_path('module', 'rules_admin'). '/rules_admin.js');
   $form = rules_admin_form_rule_settings(array(), (boolean)$set_info);
   $form['settings']['set']['#default_value'] = $set_info['name'];
   return $form;
 }
 
+function rules_admin_form_add_rule_validate($form_id, &$form_state) {
+  _rules_admin_validate_machine_name($form_state['values']['name']);
+}
+
+function _rules_admin_validate_machine_name($machine_name) {
+  // Check that the machine name is valid.
+  if(preg_match('/[^a-z0-9_]/', $machine_name)) {
+    form_set_error('name' ,t('Machine name must be alphanumeric and underscores only.'));
+  }
+
+  // Check that the machine name doesn't exist.
+  $count = db_query('SELECT COUNT(*) FROM {rules_rules} WHERE name = %s', $machine_name);
+  if ($count) {
+    form_set_error('name' ,t('The given machine name already exists.'));
+  }
+}
+
 function rules_admin_form_add_rule_submit($form_id, &$form_state) {
   $rule = isset($form_state['proxy']) ? $form_state['proxy']->get_rule() : array('#type' => 'rule');
 
@@ -87,8 +104,8 @@ function rules_admin_form_add_rule_submi
   $rule['#categories'] = array_filter(array_map('trim', explode(',', $form_state['values']['categories'])));
   $rule['#status'] = 'custom';
 
-  //get an unique name
-  $rule_name = _rules_admin_rule_get_new_unique_name();
+  // Get the name of the rule.
+  $rule_name = 'rules_' . $form_state['values']['name'];
 
   rules_item_save('rules', $rule_name, $rule);
   rules_clear_cache();
@@ -102,7 +119,7 @@ function rules_admin_form_add_rule_submi
  * @param $is_set
  *   When adding a new rule for a rule set, TRUE.
  */
-function rules_admin_form_rule_settings($rule, $is_set = FALSE) {
+function rules_admin_form_rule_settings($rule, $is_set = FALSE, $add = TRUE) {
   $form['settings'] = array(
     '#type' => 'fieldset',
     '#title' => t('Rule settings'),
@@ -115,6 +132,15 @@ function rules_admin_form_rule_settings(
     '#default_value' => isset($rule['#label']) ? $rule['#label'] : '',
     '#required' => TRUE,
   );
+  if ($add) {
+    $form['settings']['name'] = array(
+      '#title' => t('Machine readable name'),
+      '#type' => 'textfield',
+      '#description' => t('Specify a unique name containing only alphanumeric characters, and underscores.'),
+      '#default_value' => isset($set_info['name']) ? $set_info['name'] : '',
+      '#required' => TRUE,
+    );
+  }
   $form['settings']['set'] = array(
     '#type' => 'select',
     '#default_value' => isset($rule['#set']) ? $rule['#set'] : '',
@@ -160,13 +186,12 @@ function rules_admin_form_rule_settings(
  * Returns the form for editing a rule
  */
 function rules_admin_form_edit_rule(&$form_state, $proxy) {
-
   $form_state['proxy'] = &$proxy;
   $rule = $proxy->get_rule();
   _rules_element_defaults($rule);
 
   $is_set = strpos($rule['#set'], 'event_') !== 0;
-  $form = rules_admin_form_rule_settings($rule, $is_set);
+  $form = rules_admin_form_rule_settings($rule, $is_set, FALSE);
   $form['settings']['#collapsed'] = TRUE;
 
   // Add help
@@ -198,7 +223,6 @@ function rules_admin_form_edit_rule_subm
     $rule_ref['#'. $key] = $form_state['values'][$key];
   }
   $rule_ref['#categories'] = array_filter(array_map('trim', explode(',', $form_state['values']['categories'])));
-
   $form_state['proxy']->save_changes();
   drupal_set_message(t("The rule %label has been updated.", array('%label' => $rule_ref['#label'])));
 }
