void createCodonTables(String genomeVersion, Properties properties) {
		//---
		// Read codon tables
		//---
		for (Object key : properties.keySet()) {
			if (key.toString().startsWith(KEY_CODON)) {
				String name = key.toString().substring(KEY_CODON.length());
				String table = properties.getProperty(key.toString());
				CodonTable codonTable = new CodonTable(name, table);
				CodonTables.getInstance().add(codonTable);
			}
		}

		//---
		// Assign codon tables for different genome+chromosome
		//---
		for (Object key : properties.keySet()) {
			String keyStr = key.toString();
			if (keyStr.endsWith(KEY_CODONTABLE) && keyStr.startsWith(genomeVersion + ".")) {
				// Everything between gneomeName and ".codonTable" is assumed to be chromosome name
				int chrNameEnd = keyStr.length() - KEY_CODONTABLE.length();
				int chrNameStart = genomeVersion.length() + 1;
				int chrNameLen = chrNameEnd - chrNameStart;
				if (chrNameLen < 0) throw new RuntimeException("Error parsing config entry '" + keyStr + "'.\n\tExpected format: GENOME.CHROMOSOME.codonTable\n\tChromosome name not found!");
				String chromo = keyStr.substring(chrNameStart, chrNameEnd);

				String codonTableName = properties.getProperty(key.toString());
				CodonTable codonTable = CodonTables.getInstance().getTable(codonTableName);

				// Sanity checks
				if (genomeByVersion.get(genomeVersion) == null) throw new RuntimeException("Error parsing property '" + key + "'. No such genome '" + genomeVersion + "'");
				if (codonTable == null) throw new RuntimeException("Error parsing property '" + key + "'. No such codon table '" + codonTableName + "'");

				Chromosome chr = genomeByVersion.get(genomeVersion).getChromosome(chromo);
				if (chr == null) {
					// Create chromosome
					Genome genome = genomeByVersion.get(genomeVersion);
					chr = new Chromosome(genome, 0, 0, 1, chromo);
					genome.add(chr);
				}

				// Everything seems to be OK, go on
				CodonTables.getInstance().add(genomeByVersion.get(genomeVersion), chr, codonTable);
			}
		}
	}