diff --git a/src/com/android/dialer/list/PhoneFavoriteDragAndDropListeners.java b/src/com/android/dialer/list/PhoneFavoriteDragAndDropListeners.java
index 89f39ce..ac089c7 100644
--- a/src/com/android/dialer/list/PhoneFavoriteDragAndDropListeners.java
+++ b/src/com/android/dialer/list/PhoneFavoriteDragAndDropListeners.java
@@ -17,7 +17,6 @@
 
 import android.content.ClipData;
 import android.graphics.Rect;
-import android.graphics.Canvas;
 import android.util.Log;
 import android.view.DragEvent;
 import android.view.GestureDetector.SimpleOnGestureListener;
@@ -136,6 +135,9 @@
 
         @Override
         public boolean onDrag(View v, DragEvent event) {
+            if (DEBUG) {
+                Log.v(TAG, event.toString());
+            }
             // Handles drag events.
             switch (event.getAction()) {
                 case DragEvent.ACTION_DRAG_STARTED:
@@ -198,6 +200,13 @@
                     }
                     break;
                 case DragEvent.ACTION_DRAG_ENDED:
+                    if (mTileAdapter.getInDragging()) {
+                        // If the drag and drop ends when the drop happens outside of any rows,
+                        // we will end the drag here and put the item back to where it was dragged
+                        // from before.
+                        mTileAdapter.setInDragging(false);
+                        mTileAdapter.dropToUnsupportedView();
+                    }
                     break;
                 case DragEvent.ACTION_DRAG_LOCATION:
                     break;
diff --git a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
index 58ebcff..992cb1f 100644
--- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
@@ -276,13 +276,16 @@
 
     @Override
     public int getCount() {
-        if (mContactEntries == null) {
+        if (mContactEntries == null || mContactEntries.isEmpty()) {
             return 0;
         }
 
         int total = mContactEntries.size();
-
-        return total - (mMaxTiledRows * (mColumnCount - 1));
+        // The number of contacts that don't show up as tiles
+        final int nonTiledRows = Math.max(0, total - getMaxContactsInTiles());
+        // The number of tiled rows
+        final int tiledRows = getRowCount(total - nonTiledRows);
+        return nonTiledRows + tiledRows;
     }
 
     public int getMaxTiledRows() {
@@ -521,6 +524,14 @@
     }
 
     /**
+     * Invoked when the dragged item is dropped to unsupported location. We will then move the
+     * contact back to where it was dragged from.
+     */
+    public void dropToUnsupportedView() {
+        dropContactEntry(-1);
+    }
+
+    /**
      * Sets an item to for pending removal. If the user does not click the undo button, the item
      * will be removed at the next interaction.
      *
