private void startNextTrialGroup() {	
		if (experimentPhase == PHASE_TRAINING) { 		
			//we're in the first block's training phase 
			
			if (!Trial.trainingTrialGroups.isEmpty()) { 
				//start next training block
				startTrialGroup(Trial.trainingTrialGroups.remove(0));
			} else { 
				//all training blocks shown, show post-training instructions
				experimentPhase = PHASE_XP;
				gui.instructionPanel.showFirstBlockPostTrainingInstructions();
			}
			
		} else {
			//not in training phase
			
			if (Trial.experimentTrialGroups.isEmpty()) { 
				// experiment is completed
				gui.instructionPanel.showXpOverText();
			} else {
				//experiment not over, move on
				
				if (globalTrialGroupNb > 0 && experimentPhase == PHASE_XP && (globalTrialGroupNb % (nbOfTrialGroups / Options.N_BLOCKS) == 0)) {
					//Time for a break!
					experimentPhase = INTERBLOCK_INSTRUCTIONS;	
					boolean lastblock = globalTrialGroupNb == nbOfTrialGroups * (Options.N_BLOCKS - 1) / Options.N_BLOCKS; // TRUE if the upcoming block is the last one
					gui.instructionPanel.showInterBlockInstructions(lastblock);
				} else {
					//just show the next trialGroup!
					if (experimentPhase == INTERBLOCK_INSTRUCTIONS) {
						experimentPhase = PHASE_XP;
					}
					globalTrialGroupNb++;
					startTrialGroup(Trial.experimentTrialGroups.remove(0));
				}
			}
		}
	}