diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 9f25e4e..ba77438 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -572,7 +572,7 @@
 
     private void showEmptyStateForTab(int tab) {
         if (mContactsUnavailableFragment != null) {
-            switch (tab) {
+            switch (getTabPositionForTextDirection(tab)) {
                 case TabState.FAVORITES:
                     mContactsUnavailableFragment.setMessageText(
                             R.string.listTotalAllContactsZeroStarred, -1);
@@ -1022,7 +1022,7 @@
             clearFrequentsMenu.setVisible(false);
             helpMenu.setVisible(false);
         } else {
-            switch (mActionBarAdapter.getCurrentTab()) {
+            switch (getTabPositionForTextDirection(mActionBarAdapter.getCurrentTab())) {
                 case TabState.FAVORITES:
                     contactsFilterMenu.setVisible(false);
                     clearFrequentsMenu.setVisible(hasFrequents());
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 380d4bd..03171f5 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -1903,29 +1903,29 @@
         @Override
         public void onLoadFinished(Loader<Contact> loader, Contact data) {
             Trace.beginSection("onLoadFinished()");
+            try {
 
-            if (isFinishing()) {
-                return;
-            }
-            if (data.isError()) {
-                // This shouldn't ever happen, so throw an exception. The {@link ContactLoader}
-                // should log the actual exception.
-                throw new IllegalStateException("Failed to load contact", data.getException());
-            }
-            if (data.isNotFound()) {
-                if (mHasAlreadyBeenOpened) {
-                    finish();
-                } else {
+                if (isFinishing()) {
+                    return;
+                }
+                if (data.isError()) {
+                    // This shouldn't ever happen, so throw an exception. The {@link ContactLoader}
+                    // should log the actual exception.
+                    throw new IllegalStateException("Failed to load contact", data.getException());
+                }
+                if (data.isNotFound()) {
                     Log.i(TAG, "No contact found: " + ((ContactLoader)loader).getLookupUri());
                     Toast.makeText(QuickContactActivity.this, R.string.invalidContactMessage,
                             Toast.LENGTH_LONG).show();
+                    finish();
+                    return;
                 }
-                return;
+
+                bindContactData(data);
+
+            } finally {
+                Trace.endSection();
             }
-
-            bindContactData(data);
-
-            Trace.endSection();
         }
 
         @Override
