         }
 
         Tracker.sharedTracker.screenAppeared(nextViewController.title ?? nextViewController.readableClassName())
-
-        if visibleViewController == onboardingViewControllers.last {
-            nextButton.setTitle("Done", forState: .Normal)
-        }
-        else {
-            nextButton.setTitle("Next", forState: .Normal)
-        }
 
         visibleViewController.willMoveToParentViewController(nil)
         addChildViewController(nextViewController)

protocol OnboardingStep {
    var onboardingViewController: OnboardingViewController? { get set }
    var onboardingData: OnboardingData? { get set }
    optional func onboardingWillProceed()
}



        goToController(viewController, data: data, direction: .Right)
    }

}

// MARK: Controller transitions
extension OnboardingViewController {

    private func goToController(viewController: UIViewController, data: OnboardingData?, direction: OnboardingDirection) {
        if let visibleViewController = visibleViewController {
            canGoNext = false
            transitionFromViewController(visibleViewController, toViewController: viewController, direction: direction)
        }

        if viewController == onboardingViewControllers.last {
            nextButton.setTitle("Done", forState: .Normal)
        }
        else {
            nextButton.setTitle("Next", forState: .Normal)
        }

        if var onboardingStep = viewController as? OnboardingStep {
            onboardingData = data
            onboardingStep.onboardingData = data
            onboardingStep.onboardingStepBegin?()
        }
    }

