     }
     
     public func presentationIndex(for pageViewController: UIPageViewController) -> Int {
-    // todo: is this correct?
-        return 0
+        guard let subView = pageViewController.viewControllers?.first else {
+            return 0
+        }
+        
+        return pageViewSubViewControllers.index(of: subView)!
     }
 }
 
 extension SpringBoardViewController: UIViewControllerTransitioningDelegate {
 
     public func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
-        // TODO: try not to use ! here?
         return SpringBoardAppLaunchTransitionAnimator(appIconButton: selectedAppButton!, springBoardViewController: self, isPresenting: true)
     }
     
     public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
-        // TODO: finish this
         return SpringBoardAppLaunchTransitionAnimator(appIconButton: selectedAppButton!, springBoardViewController: self, isPresenting: false)
     }
 }

    func springBoardAppCollectionViewController(_ viewController: SpringBoardAppCollectionViewController, didSelectAppInfo appInfo: SpringBoardAppInfo, selectedAppIconButton: UIButton) {
        selectedAppButton = selectedAppIconButton
        
        // TODO: finish this
        let viewController = SpringBoardLaunchedAppViewController()
        viewController.modalPresentationStyle = .custom
        viewController.transitioningDelegate = self


public class SpringBoardViewController: UIViewController {
    
    var selectedAppButton: UIButton?
    
    var appIconLayoutInfoItems = [
