private List<Region> constructCVSyllables(List<Region> phones) {
    List<Region> syllables = new ArrayList<Region>();

    Region current_syllable = new Region(0.0, 0.0);
    List<Region> current_phones = new ArrayList<Region>();
    for (Region phone : phones) {
      current_phones.add(phone);

      if (PhoneUtils.isVowel(phone.getLabel())) {
        // Vowels end syllables. Finish the syllable and start a new one.
        current_syllable.setStart(current_phones.get(0).getStart());
        current_syllable.setEnd(current_phones.get(current_phones.size() - 1).getEnd());
        String syl_label = "";
        for (Region p : current_phones) {
          syl_label += p.getLabel();
        }
        current_syllable.setLabel(syl_label);
        current_syllable.setAttribute(phone_feature, current_phones);
        syllables.add(current_syllable);

        current_syllable = new Region(0.0, 0.0);
        current_phones = new ArrayList<Region>();
      }
    }

    if (current_phones.size() > 0) {
      // Add trailing consonants to the end of the last syllable.
      current_syllable = syllables.get(syllables.size() - 1);
      current_syllable.setEnd(current_phones.get(current_phones.size() - 1).getEnd());
      ((List<Region>) current_syllable.getAttribute(phone_feature)).addAll(current_phones);
      String syl_label = "";
      for (Region p : (List<Region>) current_syllable.getAttribute(phone_feature)) {
        syl_label += p.getLabel();
      }
      current_syllable.setLabel(syl_label);
    }
    return syllables;
  }