         }
     }
     
+    // helper function for determining what will be the next object, 
+    // so we can determine screen flow
     private func whatIsNextObject() -> Object.Type? {
         if self.currentChallenge != nil && self.getNextActivityIdx() != nil {
             return Activity.self

                // TODO handle error
            }
            
            // to get the challenge, which is the first screen to display
            self.getNextObject()
            NSNotificationCenter.defaultCenter().postNotificationName(NotificationIdentifier.DesignStudioStarted.rawValue, object: self, userInfo: nil)
        }
    }
    
    func notifyEndActivity() {
        NSNotificationCenter.defaultCenter().postNotificationName(NotificationIdentifier.ActivityEnded.rawValue, object: self, userInfo: nil)
    }
    
    func timerWillAppear() {
        if self.startTimer {
            self.getNextObject()

        return nil
    }
    
    // this will return either Challenge or Activity or nil, depending on the what's next to show
    // Challenge is always first, then all the activities in that challenge
    // then we repeat the process for next Challenge
    // if the next object is activity the timer will be automatically started
    private func getNextObject() -> Object? {
        
        // try to get next activity in the current challenge
