@Programmatic public void copyTerms(final LocalDate startDate, final LeaseItem newItem) { LeaseTerm lastTerm = null; for (LeaseTerm term : getTerms()) { if (term.getInterval().contains(startDate)) { LeaseTerm newTerm; if (lastTerm == null) { newTerm = newItem.newTerm(term.getStartDate(), null); } else { newTerm = lastTerm.createNext(term.getStartDate(), term.getEndDate()); } term.copyValuesTo(newTerm); lastTerm = newTerm; } } }