diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 36e805c..53bfce0 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -84,6 +84,8 @@
     private ContactsIntentResolver mIntentResolver;
     protected ContactEntryListFragment<?> mListFragment;
 
+    private boolean mIsVisible;
+
     private int mActionCode = -1;
     private boolean mIsSearchMode;
     private boolean mIsSearchSupported;
@@ -137,6 +139,25 @@
         prepareSearchViewAndActionBar();
     }
 
+    @Override
+    protected void onStart() {
+        super.onStart();
+        mIsVisible = true;
+    }
+
+    @Override
+    protected void onStop() {
+        mIsVisible = false;
+        super.onStop();
+    }
+
+    /**
+     * Returns true when the Activity is currently visible (between onStart and onStop).
+     */
+    /* package */ boolean isVisible() {
+        return mIsVisible;
+    }
+
     private void prepareSearchViewAndActionBar() {
         final ActionBar actionBar = getActionBar();
         mSearchViewContainer = LayoutInflater.from(actionBar.getThemedContext())
@@ -212,6 +233,7 @@
 
     @Override
     protected void onSaveInstanceState(Bundle outState) {
+        mIsVisible = false;
         super.onSaveInstanceState(outState);
         outState.putInt(KEY_ACTION_CODE, mActionCode);
         outState.putBoolean(KEY_SEARCH_MODE, mIsSearchMode);
@@ -484,17 +506,13 @@
     private final class PhoneNumberPickerActionListener implements
             OnPhoneNumberPickerActionListener {
         @Override
-        public void onPickPhoneNumberAction(Uri dataUri) {
+        public void onPickPhoneNumberAction(Uri dataUri, int callInitiationType) {
             returnPickerResult(dataUri);
         }
 
         @Override
-        public void onCallNumberDirectly(String phoneNumber) {
-            Log.w(TAG, "Unsupported call.");
-        }
-
-        @Override
-        public void onCallNumberDirectly(String phoneNumber, boolean isVideoCall) {
+        public void onCallNumberDirectly(String phoneNumber, boolean isVideoCall,
+                int callInitiationType) {
             Log.w(TAG, "Unsupported call.");
         }
 
@@ -503,6 +521,7 @@
             returnPickerResult(intent);
         }
 
+        @Override
         public void onHomeInActionBarSelected() {
             ContactSelectionActivity.this.onBackPressed();
         }
@@ -672,6 +691,10 @@
 
     @Override
     public void onBackPressed() {
+        if (!isVisible()) {
+            return;
+        }
+
         if (mIsSearchMode) {
             mIsSearchMode = false;
             configureSearchMode();
diff --git a/src/com/android/contacts/editor/RawContactDeltaComparator.java b/src/com/android/contacts/editor/RawContactDeltaComparator.java
index 17a4dda..1a00c9d 100644
--- a/src/com/android/contacts/editor/RawContactDeltaComparator.java
+++ b/src/com/android/contacts/editor/RawContactDeltaComparator.java
@@ -120,12 +120,14 @@
         // Both are in the same account, fall back to contact ID
         Long oneId = one.getRawContactId();
         Long twoId = two.getRawContactId();
-        if (oneId == null) {
+        if (oneId == null && twoId == null) {
+            return 0;
+        } else if (oneId == null) {
             return -1;
         } else if (twoId == null) {
             return 1;
         }
 
-        return (int) (oneId - twoId);
+        return Long.compare(oneId, twoId);
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index b05cbab..a626ad0 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -114,7 +114,7 @@
     static ContactDeletionInteraction startWithTestLoaderManager(
             Activity activity, Uri contactUri, boolean finishActivityWhenDone,
             TestLoaderManagerBase testLoaderManager) {
-        if (contactUri == null) {
+        if (contactUri == null || activity.isDestroyed()) {
             return null;
         }
 
