diff --git a/resources/user_resource.inc b/resources/user_resource.inc
index c297396..d537424 100644
--- a/resources/user_resource.inc
+++ b/resources/user_resource.inc
@@ -154,6 +154,38 @@ function _user_resource_definition() {
           'access callback' => 'services_access_menu',
         ),
       ),
+      'targeted_actions' => array(
+        'password_reset' => array(
+          'access callback' => '_user_resource_access',
+          'access arguments' => array('password_reset'),
+          'access arguments append' => TRUE,
+          'callback' => '_user_resource_password_reset',
+          'args' => array(
+            array(
+              'name' => 'uid',
+              'optional' => FALSE,
+              'source' => array('path' => 0),
+              'type' => 'int',
+              'description' => 'The id of the user whose password to reset.',
+            ),
+          ),
+        ),
+        'resend_welcome_email' => array(
+          'access callback' => '_user_resource_access',
+          'access arguments' => array('resend_welcome_email'),
+          'access arguments append' => TRUE,
+          'callback' => '_user_resource_resend_welcome_email',
+          'args' => array(
+            array(
+              'name' => 'uid',
+              'optional' => FALSE,
+              'source' => array('path' => 0),
+              'type' => 'int',
+              'description' => 'The id of the user whose welcome email to resend.',
+            ),
+          ),
+        ),
+      ),
     ),
   );
 
@@ -308,7 +340,7 @@ function _user_resource_update($uid, $account) {
   }
 
   // If user is changing name, make sure they have permission.
-  if (isset($account['name']) && $account['name'] != $account_loaded->name && !(user_access('change own username') || user_access('administer users'))) {
+  if (isset($account['name']) && $account['name'] != $account_loaded->name && !user_access('change own username')) {
     return services_error(t('You are not allowed to change your username.'), 406);
   }
 
@@ -452,6 +484,68 @@ function _user_resource_logout_1_1() {
 }
 
 /**
+ * Send a password reset email for the specified user.
+ */
+function _user_resource_password_reset($uid) {
+  global $language;
+  if (ctype_digit($uid)) {
+    $account = user_load($uid);
+  }
+  else {
+    $account = user_load_by_name($uid);
+  }
+  if (empty($account) || !isset($account)) {
+    return services_error(t('There is no user with ID @uid.', array('@uid' => $uid)), 404);
+  }
+
+  // Mail one time login URL and instructions using current language.
+  $mail = _user_mail_notify('password_reset', $account, $language);
+  if (!empty($mail)) {
+    watchdog('user', 'Password reset instructions mailed to %name at %email.', array('%name' => $account->name, '%email' => $account->mail));
+  }
+  else {
+    watchdog('user', 'There was an error re-sending password reset instructions mailed to %name at %email', array('%name' => $account->name, '%email' => $account->mail));
+  }
+  // Everything went right.
+  return TRUE;
+}
+
+/**
+ * Send a welcome email for the specified user.
+ */
+function _user_resource_resend_welcome_email($uid) {
+  global $language;
+
+  $account = user_load($uid);
+  if (empty($account)) {
+    return services_error(t('There is no user with ID @uid.', array('@uid' => $uid)), 404);
+  }
+
+  $user_register = variable_get('user_register', 2);
+  switch ($user_register) {
+    case 0:
+      $op = 'register_admin_created';
+      break;
+    case 1:
+      $op = 'register_no_approval_required';
+      break;
+    case 2:
+      $op = 'register_pending_approval';
+  }
+
+  // Mail the welcome emaiil using current language.
+  $mail = _user_mail_notify($op, $account, $language);
+  if (!empty($mail)) {
+    watchdog('user', 'Welcome message has been re-sent to %name at %email.', array('%name' => $account->name, '%email' => $account->mail));
+  }
+  else {
+    watchdog('user', 'There was an error re-sending welcome message to %name at %email', array('%name' => $account->name, '%email' => $account->mail));
+  }
+  // Everything went right.
+  return TRUE;
+}
+
+/**
  * Return an array of optionally paged uids baed on a set of criteria.
  *
  * An example request might look like
@@ -519,5 +613,9 @@ function _user_resource_access($op = 'view', $args = array()) {
       }
     case 'delete':
       return user_access('administer users');
+    case 'password_reset':
+      return TRUE;
+    case 'resend_welcome_email':
+      return user_access('administer users');
   }
 }
