--- features.user.inc	2010-08-06 06:59:41.000000000 +1000
+++ features.user.inc.new	2010-10-28 12:31:38.788059880 +1100
@@ -18,6 +18,12 @@ function user_features_api() {
       'default_hook' => 'user_default_permissions',
       'default_file' => FEATURES_DEFAULTS_INCLUDED,
     ),
+    'user_profile_field' => array(
+      'name' => t('Profile fields'),
+      'feature_source' => TRUE,
+      'default_hook' => 'user_default_profile_fields',
+      'default_file' => FEATURES_DEFAULTS_INCLUDED,
+    ),
     // DEPRECATED
     'user' => array(
       'name' => t('Permissions'),
@@ -222,6 +228,77 @@ function user_role_features_rebuild($mod
 }
 
 /**
+ * Implementation of hook_features_export().
+ */
+function user_profile_field_features_export($data, &$export, $module_name = '') {
+  $export['dependencies']['features'] = 'features';
+  $export['dependencies']['profile'] = 'profile';
+  foreach ($data as $field) {
+    $export['features']['user_profile_field'][$field] = $field;
+  }
+  return array();
+}
+
+/**
+ * Implementation of hook_features_export_options().
+ */
+function user_profile_field_features_export_options() {
+	$fields = array();
+	//query DB directly instead of going through a Profile module function as 
+	//the Profile module doesn't provide a good function for this purpose...
+	$db_result = db_query('SELECT name, title FROM {profile_fields}');
+	while ($field = db_fetch_object($db_result)) {
+	  $fields[$field->name] = $field->title;
+	}
+	return $fields;
+}
+
+/**
+ * Implementation of hook_features_export_render().
+ */
+function user_profile_field_features_export_render($module, $data) {
+	$code = array();
+  $code[] = '  $profile_fields = array();';
+  $code[] = '';
+  
+  foreach ($data as $name) {
+  	$db_result = db_query("SELECT * FROM {profile_fields} WHERE name = '%s'", $name);
+  	if ($field = db_fetch_array($db_result)) {
+  		unset($field['fid']);
+  		$code[] = "  \$profile_fields['{$name}'] = " . features_var_export($field) .";";
+  	}
+  }
+  $code[] = "return \$profile_fields;";
+  $code = implode("\n", $code);
+  return array('user_default_profile_fields' => $code);
+}
+
+/**
+ * Implementation of hook_features_revert().
+ */
+function user_profile_field_features_revert($module) {
+  user_profile_field_features_rebuild($module);
+}
+
+/**
+ * Implementation of hook_features_rebuild().
+ */
+function user_profile_field_features_rebuild($module) {
+  if ($defaults = features_get_default('user_profile_field', $module)) {
+    foreach ($defaults as $field) {
+    	//if the field doesn't exist in the DB at the moment then insert it
+    	if (db_result(db_query("SELECT COUNT(*) FROM {profile_fields} WHERE name = '%s'", $field['name'])) == 0) {
+      	drupal_write_record('profile_fields', $field);
+    	}
+    	//otherwise just update it
+    	else {
+    		drupal_write_record('profile_fields', $field, 'name');
+    	}
+    }
+  }
+}
+
+/**
  * Generate a perm to module mapping.
  */
 function _user_features_permission_map($reset = FALSE) {
