public static Highscore [] load(InputStream in)
	throws IOException {
		Vector highscores=new Vector(20,40);
		InputStreamReader inr = new InputStreamReader(in);
		String line;
		while ( (line=jgame.impl.EngineLogic.readline(inr)) != null ) {
			Vector fields = new Vector(5,10);
			// XXX we use "`" to represent empty string because
			// StringTokenizer skips empty tokens
			Vector tokens = jgame.impl.EngineLogic.tokenizeString(line,'\t');
			//StringTokenizer toker = new StringTokenizer(line,"\t");
			for (Enumeration e=tokens.elements(); e.hasMoreElements(); ) {
				String tok = (String)e.nextElement();
				if (tok.equals("`")) tok="";
				fields.addElement(tok);
			}
			Highscore hs=null;
			if (fields.size()==1) {
				// we assume we have a highscore with no fields and empty name
				hs=new Highscore(Integer.parseInt((String)fields.elementAt(0)), "");
			}
			if (fields.size() >= 2) {
				hs=new Highscore(Integer.parseInt((String)fields.elementAt(0)),
					(String)fields.elementAt(1) );
			}
			if (fields.size() >= 3) {
				hs.fields=new String[fields.size()-2];
				for (int i=2; i<fields.size(); i++) {
					hs.fields[i-2] = (String)fields.elementAt(i);
				}
			}
			highscores.addElement(hs);
		}
		Highscore [] ret = new Highscore [highscores.size()];
		for (int i=0; i<highscores.size(); i++) {
			ret[i] = (Highscore)highscores.elementAt(i);
		}
		return ret;
		//return (Highscore[])highscores.toArray(new Highscore[]{});
	}