@Override
	public boolean setFromString(String value) {
		this.clear();
		String[] values=value.split("\\x00");
		for(String v : values) {
			// handle id3v2.2/2.3 genre lists "(xx)(xx)text"
			if(v.matches("\\(\\d{1,3}\\).*")) {
				int endParen=v.indexOf(")");
				if(!addNumericId(v.substring(1,endParen))) {
					// didn't parse this, just add the string
					this.add(v);
				} else if(endParen+1 <v.length()) {
					// did parse an id3 genre, recursively process chain of genre list
					// (this is probably rare)
					setFromString(v.substring(endParen+1));
				}
			// handle id3v2.4 reference to genre ID
			} else if(v.matches("\\d{1,3}")) {
				if(!addNumericId(v)) {
					this.add(v);
				}
			// handle any other string
			} else {
				this.add(v);
			}
		}
		return this.size()>0;
	}