public List<LargeSongElement> generateRandomSongStructure() {
		List<LargeSongElement> result = new ArrayList<LargeSongElement>();
		Random rnd = new Random();
		
		List<SongElementType> overallForm = songSchemes.get(rnd.nextInt(songSchemes.size()));
		
		LargeSongElement songVerse = new LargeSongElement(SongElementType.VERSE);
		songVerse.setRhymeStructure(verseSchemes.get(rnd.nextInt(verseSchemes.size())));
		
		LargeSongElement songChorus = new LargeSongElement(SongElementType.CHORUS);
		songChorus.setRhymeStructure(chorusSchemes.get(rnd.nextInt(chorusSchemes.size())));

		LargeSongElement songBreak = new LargeSongElement(SongElementType.BREAK);
		songBreak.setRhymeStructure(verseSchemes.get(rnd.nextInt(verseSchemes.size())));

		LargeSongElement songBridge = new LargeSongElement(SongElementType.BRIDGE);
		songBridge.setRhymeStructure(bridgeSchemes.get(rnd.nextInt(bridgeSchemes.size())));
		
		LargeSongElement songIntro = new LargeSongElement(SongElementType.INTRO);
		songIntro.setRhymeStructure(bridgeSchemes.get(rnd.nextInt(bridgeSchemes.size())));
		
		LargeSongElement songOutro = new LargeSongElement(SongElementType.OUTRO);
		songOutro.setRhymeStructure(bridgeSchemes.get(rnd.nextInt(bridgeSchemes.size())));
		
		for(SongElementType elType : overallForm) {
			switch(elType) {
				case VERSE:
					result.add(songVerse.getSchemeCopy());
					break;
				case CHORUS:
					result.add(songChorus);
					break;
				case BREAK:
					result.add(songBreak.getSchemeCopy());
					break;
				case BRIDGE:
					result.add(songBridge);
					break;
				case INTRO:
					result.add(songIntro.getSchemeCopy());
					break;
				case OUTRO:
					result.add(songOutro.getSchemeCopy());
					break;
			}
		}
		
		return result;
	}