public List<Alignment> importAlignments() throws IOException, ImportException
	{
		boolean done = false;

		List<Taxon> taxonList = null;
		List<Alignment> alignments = new ArrayList<Alignment>();

		while (!done) {
			try {

				NexusBlock block = findNextBlock();

				if (block == NexusBlock.TAXA) {

					taxonList = readTaxaBlock();

				} else if (block == NexusBlock.CHARACTERS) {

					if (taxonList == null) {
						throw new MissingBlockException("TAXA block is missing");
					}

					List<Sequence> sequences = readCharactersBlock(taxonList);
					alignments.add(new BasicAlignment(sequences));

				} else if (block == NexusBlock.DATA) {

					// A data block doesn't need a taxon block before it
					// but if one exists then it will use it.
					List<Sequence> sequences = readDataBlock(taxonList);
					alignments.add(new BasicAlignment(sequences));

				} else {
					// Ignore the block..
				}

			} catch (EOFException ex) {
				done = true;
			}
		}

		if (alignments.size() == 0) {
			throw new MissingBlockException("DATA or CHARACTERS block is missing");
		}

		return alignments;
	}