@Override
	public String mostProductiveArtist() {
		// Check if no changes occured in the playlist => the most productive
		// artist is the same
		if (artist != null && !this.addedOrRemovedMusics) {
			return artist;
		} else {
			// Check who is the most productive artist
			Map<String, ArtistInfo> tmp = new HashMap<String, ArtistInfo>();

			for (Music m : this.playlist) {

				ArtistInfo aI = tmp.get(m.getArtist());
				if (aI == null) {
					// Add new
					aI = new ArtistInfo(m.getDuration());
				} else {
					// Update Information
					if (aI.getLongestDuration() < m.getDuration()) {
						aI.setLongestDuration(m.getDuration());
					}
					aI.incrementNrMusics();
				}
				tmp.put(m.getArtist(), aI);
			}

			// order everything and get the new artist
			this.artist = sortByValue(tmp);
			this.addedOrRemovedMusics = false;

			return artist;

		}
	}