ClosedArea append(LineSegmentInt other) {
		if (isClosed()) {
			throw new IllegalStateException();
		}
		if (getSegments().contains(other)) {
			throw new IllegalArgumentException();
		}
		final ClosedArea result = new ClosedArea();
		for (LineSegmentInt seg : segmentsList) {
			result.addSegment(seg);
		}
		if (result.getSegments().size() > 0 && result.getLastSegment().atLeastOneCommonExtremities(other) == false) {
			throw new IllegalArgumentException();
		}
		if (points.contains(other.getP1()) && points.contains(other.getP2())
				&& other.getP1().equals(getFirstPoint()) == false && other.getP2().equals(getFirstPoint()) == false) {
			return null;
		}
		result.addSegment(other);
		assert result.isConsistent();

		return result;
	}