diff --git a/src/com/android/mail/compose/ComposeActivity.java b/src/com/android/mail/compose/ComposeActivity.java
index ed6ae53..fa31833 100644
--- a/src/com/android/mail/compose/ComposeActivity.java
+++ b/src/com/android/mail/compose/ComposeActivity.java
@@ -667,7 +667,7 @@
         // Update the from spinner as other accounts
         // may now be available.
         if (mFromSpinner != null && mAccount != null) {
-            mFromSpinner.asyncInitFromSpinner(mComposeMode, mAccount, mAccounts);
+            mFromSpinner.initialize(mComposeMode, mAccount, mAccounts, mRefMessage);
         }
     }
 
@@ -863,17 +863,17 @@
     }
 
     private void initFromSpinner(Bundle bundle, int action) {
-        String accountString = null;
         if (action == EDIT_DRAFT && mDraft.draftType == UIProvider.DraftType.COMPOSE) {
             action = COMPOSE;
         }
-        mFromSpinner.asyncInitFromSpinner(action, mAccount, mAccounts);
+        mFromSpinner.initialize(action, mAccount, mAccounts, mRefMessage);
+
         if (bundle != null) {
             if (bundle.containsKey(EXTRA_SELECTED_REPLY_FROM_ACCOUNT)) {
                 mReplyFromAccount = ReplyFromAccount.deserialize(mAccount,
                         bundle.getString(EXTRA_SELECTED_REPLY_FROM_ACCOUNT));
             } else if (bundle.containsKey(EXTRA_FROM_ACCOUNT_STRING)) {
-                accountString = bundle.getString(EXTRA_FROM_ACCOUNT_STRING);
+                final String accountString = bundle.getString(EXTRA_FROM_ACCOUNT_STRING);
                 mReplyFromAccount = mFromSpinner.getMatchingReplyFromAccount(accountString);
             }
         }
@@ -895,11 +895,11 @@
             // Otherwise, give the user the ability to choose which account to
             // send mail from / save drafts to.
             mFromStatic.setVisibility(View.GONE);
-            mFromStaticText.setText(mAccount.name);
+            mFromStaticText.setText(mReplyFromAccount.name);
             mFromSpinnerWrapper.setVisibility(View.VISIBLE);
         } else {
             mFromStatic.setVisibility(View.VISIBLE);
-            mFromStaticText.setText(mAccount.name);
+            mFromStaticText.setText(mReplyFromAccount.name);
             mFromSpinnerWrapper.setVisibility(View.GONE);
         }
     }
diff --git a/src/com/android/mail/compose/FromAddressSpinner.java b/src/com/android/mail/compose/FromAddressSpinner.java
index 94efe30..20d29f6 100644
--- a/src/com/android/mail/compose/FromAddressSpinner.java
+++ b/src/com/android/mail/compose/FromAddressSpinner.java
@@ -24,8 +24,10 @@
 import android.widget.Spinner;
 
 import com.android.mail.providers.Account;
+import com.android.mail.providers.Message;
 import com.android.mail.providers.ReplyFromAccount;
 import com.android.mail.utils.AccountUtils;
+import com.android.mail.utils.LogUtils;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
@@ -86,16 +88,29 @@
      *            accounts. Otherwise, show just the account this was launched
      *            with.
      * @param currentAccount Account used to launch activity.
-     * @param syncing accounts
+     * @param syncingAccounts
      */
-    public void asyncInitFromSpinner(int action, Account currentAccount,
-            Account[] syncingAccounts) {
+    public void initialize(int action, Account currentAccount, Account[] syncingAccounts,
+                Message refMessage) {
+        final List<Account> accounts = AccountUtils.mergeAccountLists(mAccounts,
+                syncingAccounts, true /* prioritizeAccountList */);
         if (action == ComposeActivity.COMPOSE) {
-            Account[] result = syncingAccounts;
-            mAccounts = AccountUtils
-                    .mergeAccountLists(mAccounts, result, true /* prioritizeAccountList */);
+            mAccounts = accounts;
         } else {
-            mAccounts = ImmutableList.of(currentAccount);
+            // First assume that we are going to use the current account as the reply account
+            Account replyAccount = currentAccount;
+
+            if (refMessage != null && refMessage.accountUri != null) {
+                // This is a reply or forward of a message access through the "combined" account.
+                // We want to make sure that the real account is in the spinner
+                for (Account account : accounts) {
+                    if (account.uri.equals(refMessage.accountUri)) {
+                        replyAccount = account;
+                        break;
+                    }
+                }
+            }
+            mAccounts = ImmutableList.of(replyAccount);
         }
         initFromSpinner();
     }
