public static final synchronized METSMetadata  parse( String filename, String mimetype, METSMetadata global_metadata ) throws InstantiationException {

	try {	
		for ( int i=0; i< parsers.length; i++ ) {
			if( mimetype.equals( (String) parsers[i][0] ) ) {
				// attempt 
				Parser p = (Parser) parsers[i][1];
				p.setup( filename, global_metadata );
				return p.parse();
			}
		}
/*
	if( mimetype.equals( 	 "chemical/x-gaussian-log" )) {
			return new GaussianParser( filename, global_metadata );
	}
	else if( mimetype.equals( "chemical/inchi" )) {
			return new InChiParser( filename, global_metadata );
	}
	else if( mimetype.equals( "xml/cml" )) {
			return new CMLParser( filename, global_metadata );
	}
*/
		//return new Parser( filename, global_metadata );
	Parser p = new DefaultParser();
	p.setup( filename, global_metadata );
	return p.parse();

	}catch(Exception ex ) {
		ex.printStackTrace( System.err );
		throw new InstantiationException();
	}

	//return new METSMetadata(); 
}