       })
    }
    
+   // 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()

   
   var onboardingCompletionBlock: (() -> Void)?
   
   override func viewDidLoad()
   {
      super.viewDidLoad()
      
      // calculate phone height
      let phoneWidth = UIScreen.mainScreen().bounds.width * phoneScreenWidthPercentage

   @IBOutlet private weak var _finalTextLabel: UILabel!
   @IBOutlet private weak var _textLabel: UILabel!
   
   private let _swipeRightRecognizer = UISwipeGestureRecognizer()
   private let _swipeLeftRecognizer = UISwipeGestureRecognizer()
   
   @IBOutlet private weak var _pageControlLayoutConstraint: NSLayoutConstraint! {
      didSet {
         if UIScreen.mainScreen().sizeType == .iPhone5 {
