synchronized boolean frameCorrectionFirstCodingExon() {
        List<Exon> exons = sortedStrand();

		// No exons? Nothing to do
		if ((exons == null) || exons.isEmpty()) return false;

		Exon exonFirst = getFirstCodingExon(); // Get first exon
		// Exon exonFirst =  exons.get(0); // Get first exon
		if (exonFirst.getFrame() <= 0) return false; // Frame OK (or missing), nothing to do

		// First exon is not zero? => Create a UTR5 prime to compensate
		Utr5prime utr5 = null;
		int frame = exonFirst.getFrame();

		if (isStrandPlus()) {
			int end = exonFirst.getStart() + (frame - 1);
			utr5 = new Utr5prime(exonFirst, exonFirst.getStart(), end, getStrand(), exonFirst.getId());
		} else {
			int start = exonFirst.getEnd() - (frame - 1);
			utr5 = new Utr5prime(exonFirst, start, exonFirst.getEnd(), getStrand(), exonFirst.getId());
		}

		// Reset frame, since it was already corrected
		exonFirst.setFrame(0);
		Cds cds = findMatchingCds(exonFirst);
		if (cds != null) cds.frameCorrection(cds.getFrame());

		// Add UTR5'
		add(utr5);

		// Update counter
		return true;
	}