       })
    }
    
+   // MARK: - Swipe Recognition Methods
+   internal func _goForwards()
+   {
+      let previousPage = _pageControl.currentPage
+      if _pageControl.currentPage++ == finalPageNumber {
+         self.onboardingCompletionBlock?()
+      }
+      else {
+         _updateUIFromPageNumber(previousPage, toPageNumber: _pageControl.currentPage)
+      }
+   }
+   
+   internal func _goBackwards()
+   {
+      let previousPage = _pageControl.currentPage
+      let currentPage = --_pageControl.currentPage
+      _updateUIFromPageNumber(previousPage, toPageNumber: currentPage)
+   }
+   
+   // MARK: - IBActions
    @IBAction private func _nextButtonPressed()
    {
-      if _pageControl.currentPage++ == _pageControl.numberOfPages - 1 {
-         self.onboardingCompletionBlock?()
-      }
-      else {
-         _updateUIForCurrentPage(_pageControl.currentPage)
-      }
+      _goForwards()
    }
    
    @IBAction private func _closeButtonPressed()


let phoneFrameAspectRatio: CGFloat = 65.0/74.0
let phoneScreenWidthPercentage: CGFloat = 0.8

extension UIScreen {
   

   
   var onboardingCompletionBlock: (() -> Void)?
   
   // MARK: - Lifecycle
   override func viewDidLoad()
   {
      super.viewDidLoad()
      
      _swipeRightRecognizer.addTarget(self, action: "_goBackwards")
      view.addGestureRecognizer(_swipeRightRecognizer)
      
      _swipeLeftRecognizer.addTarget(self, action: "_goForwards")
      _swipeLeftRecognizer.direction = .Left
      view.addGestureRecognizer(_swipeLeftRecognizer)
      
      // calculate phone height
      let phoneWidth = UIScreen.mainScreen().bounds.width * phoneScreenWidthPercentage
