                 // TODO handle error
             }
             
-            // to get the challenge, which is the first screen to display
+            // get the challenge, which is the first screen to display
+            // don't set the startTimer flag, because we don't want the timer to start until 
+            // the challenge screen disappears
             self.getNextObject()
             NSNotificationCenter.defaultCenter().postNotificationName(NotificationIdentifier.DesignStudioStarted.rawValue, object: self, userInfo: nil)
-        }
-    }
-    
+        } else {
+            // if we're comming from the challenges screen, we just have to show the screen
+            // don't get the next object and don't reset/start the timer
+            NSNotificationCenter.defaultCenter().postNotificationName(NotificationIdentifier.ShowNextTimerScreen.rawValue, object: self, userInfo: nil)
+        }
+    }
+    
+    // notification that gets called when the global timer for the activity runs out
+    // we need to show the End Activity screen
     func notifyEndActivity() {
         NSNotificationCenter.defaultCenter().postNotificationName(NotificationIdentifier.ActivityEnded.rawValue, object: self, userInfo: nil)
     }
     
+    // this will be called when the timer screen will appear
+    // startTimer flag controls if we need to move to next object 
+    // and start the global timer (that show's the End activity screen)
+    // we have to move to next activity after:
+    // - challenges screen has disappeared
+    // - next button is clicked on the Timer screen
+    // - next button is clicked on the End activity screen
     func timerWillAppear() {
         if self.startTimer {
             self.getNextObject()

        } else {
            self.finishDesignStudio()
        }
                
        return result
    }
    

            self.currentChallengeIdx = nil
            self.currentActivityIdx = nil
            
            // record that we started DS
            do {
                try realm.write {
                    self.data?.started = true
