public BreakPoint commitMinPenalty(int space, int lastSpace,
				int minPenalty) {
			if (startPos == -1 || lastSpace > endPos - startPos
					|| minPenalty == 10 * (endPos - startPos - lastSpace)) {
				/* We don't have to break anything */
				startPos = -1;
				childBPs = null;
				return this;
			}

			int size = childBPs.size();
			if (size > 1 && options != DONT_BREAK) {
				/* penalty if we are breaking the line here. */
				int breakPen = getBreakPenalty(space, lastSpace, minPenalty + 1);
				// pw.print("commit[bp="+breakPen+";"+minPenalty+";"
				// +space+","+lastSpace+"]");
				if (minPenalty == breakPen) {
					commitBreakPenalty(space, lastSpace, breakPen);
					return this;
				}
			}

			/* penalty if we are breaking only one child */
			for (int i = 0; i < size; i++) {
				BreakPoint child = (BreakPoint) childBPs.elementAt(i);
				int front = child.startPos - startPos;
				int tail = endPos - child.endPos;
				int needPenalty = minPenalty - (i < size - 1 ? 1 : 0);
				if (needPenalty == child.getMinPenalty(space - front, lastSpace
						- front - tail, needPenalty + 1)) {
					child = child.commitMinPenalty(space - front, lastSpace
							- front - tail, needPenalty);
					child.breakPos = breakPos;
					return child;
				}
			}
			pw.println("XXXXXXXXXXX CAN'T COMMIT");
			startPos = -1;
			childBPs = null;
			return this;
		}