diff --git a/modules/profile.module b/modules/profile.module
index 38d49ffad747207feb5650864f061b46b4d9bab8..720385e69451fd1add097cc304f0ec4c13daa1da 100644
--- a/modules/profile.module
+++ b/modules/profile.module
@@ -66,6 +66,11 @@ function profile_menu($may_cache) {
       'title' => t('add field'),
       'callback' => 'profile_field_form',
       'type' => MENU_CALLBACK);
+    $items[] = array('path' => 'admin/settings/profile/autocomplete',
+      'title' => t('profile category autocomplete'),
+      'callback' => 'profile_admin_settings_autocomplete',
+      'access' => user_access('administer users'),
+      'type' => MENU_CALLBACK);
     $items[] = array('path' => 'admin/settings/profile/edit',
       'title' => t('edit field'),
       'callback' => 'profile_field_form',
@@ -212,6 +217,7 @@ function profile_field_form($arg = NULL) {
   $form['fields']['category'] = array('#type' => 'textfield',
     '#title' => t('Category'),
     '#default_value' => $edit['category'],
+    '#autocomplete_path' => 'admin/settings/profile/autocomplete',
     '#description' => t('The category the new field should be part of. Categories are used to group fields logically. An example category is "Personal information".'),
     '#required' => TRUE,
   );
@@ -786,3 +792,16 @@ function _profile_field_types($type = NULL) {
 function _profile_field_serialize($type = NULL) {
   return $type == 'date';
 }
+
+/**
+ * Retrieve a pipe delimited string of autocomplete suggestions for profile categories
+ */
+function profile_admin_settings_autocomplete($string) {
+  $matches = array();
+  $result = db_query_range("SELECT category FROM {profile_fields} WHERE LOWER(category) LIKE LOWER('%s%%')", $string, 0, 10);
+  while ($data = db_fetch_object($result)) {
+    $matches[$data->category] = check_plain($data->category);
+  }
+  print drupal_to_js($matches);
+  exit();
+}
diff --git a/modules/profile/profile.module b/modules/profile/profile.module
index 38d49ffad747207feb5650864f061b46b4d9bab8..720385e69451fd1add097cc304f0ec4c13daa1da 100644
--- a/modules/profile/profile.module
+++ b/modules/profile/profile.module
@@ -66,6 +66,11 @@ function profile_menu($may_cache) {
       'title' => t('add field'),
       'callback' => 'profile_field_form',
       'type' => MENU_CALLBACK);
+    $items[] = array('path' => 'admin/settings/profile/autocomplete',
+      'title' => t('profile category autocomplete'),
+      'callback' => 'profile_admin_settings_autocomplete',
+      'access' => user_access('administer users'),
+      'type' => MENU_CALLBACK);
     $items[] = array('path' => 'admin/settings/profile/edit',
       'title' => t('edit field'),
       'callback' => 'profile_field_form',
@@ -212,6 +217,7 @@ function profile_field_form($arg = NULL) {
   $form['fields']['category'] = array('#type' => 'textfield',
     '#title' => t('Category'),
     '#default_value' => $edit['category'],
+    '#autocomplete_path' => 'admin/settings/profile/autocomplete',
     '#description' => t('The category the new field should be part of. Categories are used to group fields logically. An example category is "Personal information".'),
     '#required' => TRUE,
   );
@@ -786,3 +792,16 @@ function _profile_field_types($type = NULL) {
 function _profile_field_serialize($type = NULL) {
   return $type == 'date';
 }
+
+/**
+ * Retrieve a pipe delimited string of autocomplete suggestions for profile categories
+ */
+function profile_admin_settings_autocomplete($string) {
+  $matches = array();
+  $result = db_query_range("SELECT category FROM {profile_fields} WHERE LOWER(category) LIKE LOWER('%s%%')", $string, 0, 10);
+  while ($data = db_fetch_object($result)) {
+    $matches[$data->category] = check_plain($data->category);
+  }
+  print drupal_to_js($matches);
+  exit();
+}