@FireExtended
  public void appendReverse() {
    // ok, get the legs
    SegmentList list = super.getSegments();
    ArrayList<PlanningSegment> holder = new ArrayList<PlanningSegment>();
    Enumeration<Editable> iterator = list.elements();
    while (iterator.hasMoreElements()) {
      // put this element at the start
      holder.add(0, (PlanningSegment) iterator.nextElement());
    }

    // now run the legs back in reverse
    Iterator<PlanningSegment> iter2 = holder.iterator();
    while (iter2.hasNext()) {
      PlanningSegment pl = iter2.next();

      try {
        PlanningSegment pl2 = (PlanningSegment) pl.clone();

        // now reverse it
        double newCourse = pl2.getCourse() + 180d;
        if (newCourse > 360) newCourse -= 360;
        pl2.setCourse(newCourse);

        // show the name as reversed
        pl2.setName(pl2.getName() + "(R)");

        // ok, now add it
        this.add(pl2);
      } catch (CloneNotSupportedException e) {
        e.printStackTrace();
      }
    }

    // ok, better throw in a recalculate
    this.recalculate();
  }