diff --git a/index.html b/index.html
index 332814b..3550b8b 100755
--- a/index.html
+++ b/index.html
@@ -59,7 +59,7 @@ $(document).ready(function(){
 
 		// user interactions...
 		.swipe({
-			swipeStatus: swipeHandler,
+			swipeStatus: makeSwipeHandler(),
 
 			// XXX these get called instead of pinches...
 			swipeUp: function(event, direction, distance, duration, fingerCount){
diff --git a/magazine.js b/magazine.js
index 5643b8a..8a1ab51 100755
--- a/magazine.js
+++ b/magazine.js
@@ -361,61 +361,73 @@ function viewResizeHandler(){
 // 		each call while dragging...
 // XXX for some reason with finger count of 3 and greater, touchSwipe
 // 		dies on	android...
-function swipeHandler(evt, phase, direction, distance, duration, fingers){
-	var pages = $('.page')
-	var cur = $('.current.page')
-	var n = pages.index(cur)
-	var scale = getPageScale()
-	var mag = $('.magazine')
-	var pos = $('.navigator .bar .indicator')
+function makeSwipeHandler(){
+	var pages
+	var cur
+	var n
+	var scale
+	var mag
+	var pos
+	var viewer
 
-	// XXX make this drag pages that are larger than view before dragging outside...
-	if(phase=='move' 
-			// see if wee need to drag the page and allways drag the ribbon...
-			&& (DRAG_FULL_PAGE || !_PAGE_VIEW)
-			&& (direction=='left' || direction=='right')){
-		if(direction == 'left'){
-			shiftMagazineTo(-cur.position()['left']/scale - distance/scale)
-		} else if(direction == 'right') {
-			shiftMagazineTo(-cur.position()['left']/scale + distance/scale)
-		}
+	return function(evt, phase, direction, distance, duration, fingers){
 
-		$('.viewer').trigger('magazineDragging')
+		if(phase == 'start'){
+			// NOTE: this is used with the "unanimated" trick, we will make
+			//		dragging real-time...
+			togglePageDragging('on')
 
-	} else if(phase == 'start'){
-		// NOTE: this is used with the "unanimated" trick, we will make
-		//		dragging real-time...
-		togglePageDragging('on')
+			// setup the data for the drag...
+			pages = $('.page')
+			cur = $('.current.page')
+			n = pages.index(cur)
+			scale = getPageScale()
+			mag = $('.magazine')
+			pos = $('.navigator .bar .indicator')
+			viewer = $('.viewer')
 
-	} else if(phase == 'cancel'){
-		togglePageDragging('off')
-		setCurrentPage()
-
-	} else if(phase =='end' ){
-		togglePageDragging('off')
-		// see which page is closer to the middle of the screen and set it...
-		// do this based on how much we dragged...
-		var p = Math.ceil((distance/scale)/cur.width())
-
-		// prev page...
-		if(direction == 'right'){
-			// 2 fingers moves to closest article...
-			if(fingers == 2){
-				prevArticle()
-			// 3+ fingers moves to bookmark...
-			} else if(fingers >= 3){
-				prevBookmark()
-			} else {
-				setCurrentPage(Math.max(n-p, 0))
+		// XXX make this drag pages that are larger than view before dragging outside...
+		} else if(phase=='move' 
+				// see if wee need to drag the page and allways drag the ribbon...
+				&& (DRAG_FULL_PAGE || !_PAGE_VIEW)
+				&& (direction=='left' || direction=='right')){
+			if(direction == 'left'){
+				shiftMagazineTo(-cur.position().left/scale - distance/scale)
+			} else if(direction == 'right') {
+				shiftMagazineTo(-cur.position().left/scale + distance/scale)
 			}
-		// next page...
-		} else if(direction == 'left'){
-			if(fingers == 2){
-				nextArticle()
-			} else if(fingers >= 3){
-				nextBookmark()
-			} else {
-				setCurrentPage(Math.min(n+p, pages.length-1))
+			viewer.trigger('magazineDragging')
+
+		} else if(phase == 'cancel'){
+			togglePageDragging('off')
+			setCurrentPage()
+
+		} else if(phase =='end' ){
+			togglePageDragging('off')
+			// see which page is closer to the middle of the screen and set it...
+			// do this based on how much we dragged...
+			var p = Math.ceil((distance/scale)/cur.width())
+
+			// prev page...
+			if(direction == 'right'){
+				// 2 fingers moves to closest article...
+				if(fingers == 2){
+					prevArticle()
+				// 3+ fingers moves to bookmark...
+				} else if(fingers >= 3){
+					prevBookmark()
+				} else {
+					setCurrentPage(Math.max(n-p, 0))
+				}
+			// next page...
+			} else if(direction == 'left'){
+				if(fingers == 2){
+					nextArticle()
+				} else if(fingers >= 3){
+					nextBookmark()
+				} else {
+					setCurrentPage(Math.min(n+p, pages.length-1))
+				}
 			}
 		}
 	}