diff --git a/messaging.module b/messaging.module
index de88ceb..42acbc0 100644
--- a/messaging.module
+++ b/messaging.module
@@ -1283,3 +1283,13 @@ function messaging_user_format_name($account, $html = FALSE) {
   $account = messaging_user_object($account);
   return $html ? theme('username', $account) : check_plain($account->name);
 }
+
+/**
+ * Update the message destination for a user.
+ */
+function messaging_update_destination($uid, $type, $destination) {
+  // Update destination of this user
+  db_query("UPDATE {messaging_destination} SET address = '%s' WHERE uid = %d AND type = '%s'", $destination, $uid, $type);
+  // Update uid for destinations with this mail
+  db_query("UPDATE {messaging_destination} SET uid = %d WHERE uid = 0 AND type = '%s' AND address = '%s'", $uid, $type, $destination);
+}
diff --git a/messaging_mail/messaging_mail.module b/messaging_mail/messaging_mail.module
index e67415b..fb70976 100644
--- a/messaging_mail/messaging_mail.module
+++ b/messaging_mail/messaging_mail.module
@@ -76,14 +76,18 @@ function messaging_mail_messaging($op, $type = NULL) {
 
 /**
  * Implementation of hook_user().
- *
- * Adds fieldset and default sending method setting.
  */
-function messaging_mail_user($type, $edit, &$user, $category = NULL) {
+function messaging_mail_user($type, $edit, &$account, $category = NULL) {
   switch ($type) {
     case 'update':
       // Claim user mail address if in destinations table
-      messaging_mail_update_user($user);
+      if ($account->status && !empty($edit['mail']) && $edit['mail'] != $account->mail) {
+        messaging_update_destination($account->uid, 'mail', $edit['mail']);
+      }
+      break;
+    default:
+      // Do nothing.
+      break;
   }
 }
 
@@ -101,21 +105,6 @@ function messaging_mail_methods() {
 }
 
 /**
- * Update destinations when a user account is updated, created
- * 
- * The destinations for that mail account will be assigned to the user
- */
-function messaging_mail_update_user($account) {
-  if ($account->status) {
-    // Update mail for destinations of this user
-    db_query("UPDATE {messaging_destination} SET address = '%s' WHERE uid = %d AND type = 'mail'", $account->mail, $account->uid);
-    // Update uid for destinations with this mail
-    db_query("UPDATE {messaging_destination} SET uid = %d WHERE uid = 0 AND type = 'mail' AND address = '%s'", $account->uid, $account->mail);
-  }
-}
-
-
-/**
  * Send mail message to user account
  * 
  * This is a callback function that will be invoked from messaging delivery methods
diff --git a/messaging_sms/messaging_sms.module b/messaging_sms/messaging_sms.module
index 09f1607..f0f367d 100644
--- a/messaging_sms/messaging_sms.module
+++ b/messaging_sms/messaging_sms.module
@@ -63,9 +63,9 @@ function messaging_sms_user_destination($account) {
 
 /**
  * Send SMS message using the default gateway
- * 
+ *
  * This is just a wrapper for sms_send()
- * 
+ *
  * @param $destination
  *   Mobile phone number
  */
@@ -79,4 +79,25 @@ function messaging_sms_send_msg($destination, $message, $params = array()) {
  */
 function messaging_sms_disable() {
   messaging_method_disable('sms');
-}
\ No newline at end of file
+}
+
+/**
+ * When a new sms number is confirmed update.
+ */
+function messaging_sms_form_sms_user_settings_confirm_form_alter(&$form, &$form_state) {
+  $form['#submit'][] = 'messaging_sms_update_user';
+}
+
+/**
+ * Update destinations when a user account is updated, created
+ *
+ * The destinations for that mail account will be assigned to the user
+ */
+function messaging_sms_update_user($form, &$form_state) {
+  $uid = $form_state['values']['uid'];
+  $account = user_load($uid);
+  $sms = messaging_sms_user_destination($account);
+  if ($sms) {
+    messaging_update_destination($uid, 'mobile', $sms);
+  }
+}
