diff --git a/resources/user_resource.inc b/resources/user_resource.inc
index 2fc00e0..994d247 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.',
+            ),
+          ),
+        ),
+      ),
     ),
   );
 
@@ -419,6 +451,64 @@ function _user_resource_logout() {
 }
 
 /**
+ * Send a password reset email for the specified user.
+ */
+function _user_resource_password_reset($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);
+  }
+
+  // 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
@@ -486,5 +576,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');
   }
 }
