diff --git a/src/com/android/mail/ui/ConversationListFragment.java b/src/com/android/mail/ui/ConversationListFragment.java
index e00fa3d..e55701d 100644
--- a/src/com/android/mail/ui/ConversationListFragment.java
+++ b/src/com/android/mail/ui/ConversationListFragment.java
@@ -32,7 +32,6 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ViewGroup.MarginLayoutParams;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemLongClickListener;
 import android.widget.ListView;
@@ -60,6 +59,7 @@
 import com.android.mail.providers.UIProvider.Swipe;
 import com.android.mail.ui.SwipeableListView.ListItemSwipedListener;
 import com.android.mail.ui.SwipeableListView.ListItemsRemovedListener;
+import com.android.mail.ui.SwipeableListView.SwipeListener;
 import com.android.mail.ui.ViewMode.ModeChangeListener;
 import com.android.mail.utils.LogTag;
 import com.android.mail.utils.LogUtils;
@@ -73,7 +73,8 @@
  * The conversation list UI component.
  */
 public final class ConversationListFragment extends ListFragment implements
-        OnItemLongClickListener, ModeChangeListener, ListItemSwipedListener, OnRefreshListener {
+        OnItemLongClickListener, ModeChangeListener, ListItemSwipedListener, OnRefreshListener,
+        SwipeListener {
     /** Key used to pass data to {@link ConversationListFragment}. */
     private static final String CONVERSATION_LIST_KEY = "conversation-list";
     /** Key used to keep track of the scroll state of the list. */
@@ -165,6 +166,16 @@
         super();
     }
 
+    @Override
+    public void onBeginSwipe() {
+        mSwipeRefreshWidget.setEnabled(false);
+    }
+
+    @Override
+    public void onEndSwipe() {
+        mSwipeRefreshWidget.setEnabled(true);
+    }
+
     private class ConversationCursorObserver extends DataSetObserver {
         @Override
         public void onChanged() {
@@ -420,7 +431,8 @@
         mListView.setHeaderDividersEnabled(false);
         mListView.setOnItemLongClickListener(this);
         mListView.enableSwipe(mAccount.supportsCapability(AccountCapabilities.UNDO));
-        mListView.setSwipedListener(this);
+        mListView.setListItemSwipedListener(this);
+        mListView.setSwipeListener(this);
 
         if (savedState != null && savedState.containsKey(LIST_STATE_KEY)) {
             mListView.onRestoreInstanceState(savedState.getParcelable(LIST_STATE_KEY));
@@ -436,7 +448,6 @@
 
     /**
      * Sets the choice mode of the list view
-     * @param choiceMode ListView#
      */
     private final void setChoiceMode(int choiceMode) {
         mListView.setChoiceMode(choiceMode);
diff --git a/src/com/android/mail/ui/SwipeableListView.java b/src/com/android/mail/ui/SwipeableListView.java
index 2c0ca14..8e03b93 100644
--- a/src/com/android/mail/ui/SwipeableListView.java
+++ b/src/com/android/mail/ui/SwipeableListView.java
@@ -23,16 +23,15 @@
 import android.graphics.Rect;
 import android.net.Uri;
 import android.util.AttributeSet;
-import android.widget.AbsListView;
-import android.widget.AbsListView.OnScrollListener;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewConfiguration;
+import android.widget.AbsListView;
+import android.widget.AbsListView.OnScrollListener;
 import android.widget.ListView;
 
 import com.android.mail.R;
 import com.android.mail.analytics.Analytics;
-import com.android.mail.analytics.AnalyticsUtils;
 import com.android.mail.browse.ConversationCursor;
 import com.android.mail.browse.ConversationItemView;
 import com.android.mail.browse.SwipeableConversationItemView;
@@ -139,7 +138,7 @@
         mSwipeAction = action;
     }
 
-    public void setSwipedListener(ListItemSwipedListener listener) {
+    public void setListItemSwipedListener(ListItemSwipedListener listener) {
         mSwipedListener = listener;
     }
 
@@ -226,6 +225,11 @@
     }
 
     public void dismissChild(final ConversationItemView target) {
+        // Notifies the SwipeListener that a swipe has ended.
+        if (mSwipeListener != null) {
+            mSwipeListener.onEndSwipe();
+        }
+
         final ToastBarOperation undoOp;
 
         undoOp = new ToastBarOperation(1, mSwipeAction, ToastBarOperation.UNDO, false /* batch */,
@@ -286,9 +290,7 @@
         requestDisallowInterceptTouchEvent(true);
         cancelDismissCounter();
 
-        // Notifies {@link ConversationListView} to disable pull to refresh since once
-        // an item in the list view has been picked up, we don't want any vertical movement
-        // to also trigger refresh.
+        // Notifies the SwipeListener that a swipe has begun.
         if (mSwipeListener != null) {
             mSwipeListener.onBeginSwipe();
         }
@@ -301,6 +303,11 @@
             adapter.startDismissCounter();
             adapter.cancelFadeOutLastLeaveBehindItemText();
         }
+
+        // Notifies the SwipeListener that a swipe has ended.
+        if (mSwipeListener != null) {
+            mSwipeListener.onEndSwipe();
+        }
     }
 
     /**
@@ -449,5 +456,6 @@
 
     public interface SwipeListener {
         public void onBeginSwipe();
+        public void onEndSwipe();
     }
 }
