diff --git a/res/drawable-hdpi/stat_notify_auth.png b/res/drawable-hdpi/stat_notify_auth.png
new file mode 100644
index 0000000..d40e2fe
--- /dev/null
+++ b/res/drawable-hdpi/stat_notify_auth.png
Binary files differ
diff --git a/res/drawable-xhdpi/stat_notify_auth.png b/res/drawable-xhdpi/stat_notify_auth.png
new file mode 100644
index 0000000..0317760
--- /dev/null
+++ b/res/drawable-xhdpi/stat_notify_auth.png
Binary files differ
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7146543..974db95 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -198,4 +198,11 @@
 
     <string name="account_manager_type_exchange" translatable="false">com.android.exchange</string>
     <string name="authority_email_provider" translatable="false">com.android.email.provider</string>
+
+    <!-- Title for notification warning about an authentication error [CHAR LIMIT=40]  -->
+    <string name="auth_error_notification_title">Authentication error</string>
+
+    <!-- text for notification warning about an authentication error [CHAR LIMIT=60]  -->
+    <string name="auth_error_notification_text">Tap to change settings for account <xliff:g id="account">%s</xliff:g></string>
+
 </resources>
diff --git a/src/com/android/exchange/SettingsRedirector.java b/src/com/android/exchange/SettingsRedirector.java
index bc0d98c..79e31f2 100644
--- a/src/com/android/exchange/SettingsRedirector.java
+++ b/src/com/android/exchange/SettingsRedirector.java
@@ -37,7 +37,8 @@
         super.onCreate(savedInstanceState);
         Intent redirect = new Intent(
                 Intent.ACTION_EDIT,
-                IntentUtilities.createActivityIntentUrlBuilder("settings").build());
+                IntentUtilities.createActivityIntentUrlBuilder(IntentUtilities.PATH_SETTINGS)
+                        .build());
         redirect.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
         startActivity(redirect);
         finish();
diff --git a/src/com/android/exchange/service/EmailSyncAdapterService.java b/src/com/android/exchange/service/EmailSyncAdapterService.java
index 2a5059b..ccfc75b 100644
--- a/src/com/android/exchange/service/EmailSyncAdapterService.java
+++ b/src/com/android/exchange/service/EmailSyncAdapterService.java
@@ -16,6 +16,10 @@
 
 package com.android.exchange.service;
 
+import android.app.Notification;
+import android.app.Notification.Builder;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
 import android.content.AbstractThreadedSyncAdapter;
 import android.content.ContentProviderClient;
 import android.content.ContentResolver;
@@ -24,6 +28,7 @@
 import android.content.Intent;
 import android.content.SyncResult;
 import android.database.Cursor;
+import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.IBinder;
@@ -40,8 +45,11 @@
 import com.android.emailcommon.service.IEmailServiceCallback;
 import com.android.emailcommon.service.SearchParams;
 import com.android.emailcommon.service.ServiceProxy;
+import com.android.emailcommon.utility.IntentUtilities;
 import com.android.emailcommon.utility.Utility;
 import com.android.exchange.Eas;
+import com.android.exchange.R.drawable;
+import com.android.exchange.R.string;
 import com.android.exchange.adapter.PingParser;
 import com.android.exchange.adapter.Search;
 import com.android.exchange.eas.EasFolderSync;
@@ -665,7 +673,44 @@
                 success = false;
             }
             updateMailbox(context, mailbox, cv, EmailContent.SYNC_STATUS_NONE);
+
+            if (syncResult.stats.numAuthExceptions > 0) {
+                showAuthNotification(account.mId, account.mEmailAddress);
+            }
             return success;
         }
     }
+    private void showAuthNotification(long accountId, String accountName) {
+        final PendingIntent pendingIntent = PendingIntent.getActivity(
+                this,
+                0,
+                createAccountSettingsIntent(accountId, accountName),
+                0);
+
+        final Notification notification = new Builder(this)
+                .setContentTitle(this.getString(string.auth_error_notification_title))
+                .setContentText(this.getString(
+                        string.auth_error_notification_text, accountName))
+                .setSmallIcon(drawable.stat_notify_auth)
+                .setContentIntent(pendingIntent)
+                .setAutoCancel(true)
+                .build();
+
+        final NotificationManager nm = (NotificationManager)
+                this.getSystemService(Context.NOTIFICATION_SERVICE);
+        nm.notify("AuthError", 0, notification);
+    }
+
+    /**
+     * Create and return an intent to display (and edit) settings for a specific account, or -1
+     * for any/all accounts.  If an account name string is provided, a warning dialog will be
+     * displayed as well.
+     */
+    public static Intent createAccountSettingsIntent(long accountId, String accountName) {
+        final Uri.Builder builder = IntentUtilities.createActivityIntentUrlBuilder(
+                IntentUtilities.PATH_SETTINGS);
+        IntentUtilities.setAccountId(builder, accountId);
+        IntentUtilities.setAccountName(builder, accountName);
+        return new Intent(Intent.ACTION_EDIT, builder.build());
+    }
 }
