         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?()
         }
     }
 


}

private extension OnboardingViewController {

    func setupButtonContainer() {

    var coverImage: UIImage? = nil
    var avatarImage: UIImage? = nil
}

private enum OnboardingDirection: CGFloat {
    case Left = -1
