diff --git a/js/ui/altTab.js b/js/ui/altTab.js
index f7a8269..e35afcd 100644
--- a/js/ui/altTab.js
+++ b/js/ui/altTab.js
@@ -83,6 +83,7 @@ AltTabPopup.prototype = {
         this.actor.add_actor(this._appSwitcher.actor);
         this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
         this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));
+        this._appSwitcher.connect('moved-in-item', Lang.bind(this, this._movedInApp));
 
         let focus = global.get_focus_monitor();
         this._appSwitcher.actor.x = focus.x + Math.floor((focus.width - this._appSwitcher.actor.width) / 2);
@@ -248,6 +249,14 @@ AltTabPopup.prototype = {
         this._select(n);
     },
 
+    _movedInApp : function(appSwitcher, n) {
+        // if we squiggle inside an app in the switcher, enable switching immediately and move to the
+        // app in question
+        this._mouseActive = true;
+
+        this._select(n)
+    },
+
     _windowActivated : function(thumbnailList, n) {
         Main.activateWindow(this._appIcons[this._currentApp].cachedWindows[n]);
         this.destroy();
@@ -434,6 +443,10 @@ SwitcherList.prototype = {
         this._highlighted = -1;
         this._separator = null;
         this._squareItems = squareItems;
+
+        this.moved_delta = 0;
+        this.prev_x =  0;
+        this.prev_y = 0;
     },
 
     addItem : function(item) {
@@ -450,6 +463,9 @@ SwitcherList.prototype = {
         bbox.connect('enter-event', Lang.bind(this, function () {
                                                   this._itemEntered(n);
                                               }));
+        bbox.connect('motion-event', Lang.bind(this, function (actor, event) {
+                    this._movedInItem(actor, event, n);
+                                              }));
 
         this._items.push(bbox);
     },
@@ -482,6 +498,21 @@ SwitcherList.prototype = {
         this.emit('item-entered', n);
     },
 
+    _movedInItem: function(actor, event, n) {
+        let [x, y] = event.get_coords();
+
+        let focus = global.get_focus_monitor();
+        if (this.prev_x > 0 || this.prev_y > 0) {
+            this.moved_delta += Math.abs(this.prev_x - x) + Math.abs(this.prev_y - y);
+        }
+
+        this.prev_x = x;
+        this.prev_y = y;
+        if (this.moved_delta > 5) {
+            this.emit('moved-in-item', n);
+        }
+    },
+
     _maxChildWidth: function (forHeight) {
         let maxChildMin = 0;
         let maxChildNat = 0;
