public boolean coalesceText(boolean recursively) {
		final Iterator<Content> it = recursively ? getDescendants()
				: content.iterator();
		Text tfirst = null;
		boolean changed = false;
		while (it.hasNext()) {
			final Content c = it.next();
			if (c.getCType() == CType.Text) {
				// Text, and no CDATA!
				final Text text = (Text)c;
				if ("".equals(text.getValue())) {
					it.remove();
					changed = true;
				} else if (tfirst == null || 
						tfirst.getParent() != text.getParent()) {
					// previous item in the iterator was not text, or
					// we are the next Text item after coming up the tree.
					tfirst = text;
				} else {
					// add our text to the first in the sequence
					tfirst.append(text.getValue());
					// remove us from the sequence 
					it.remove();
					changed = true;
				}
			} else {
				// the end of the sequence
				tfirst = null;
			}
		}
		return changed;
	}