private void adjustState(boolean back, WindowControlInfo curWCInfo, GUIPath guiPath, UserRequest ureq) {
int ecnt = guiPath.getExtendedControllerStateCount();
// traverse from the parent to the children and grandchildren
for (int i = ecnt-1; i >= 0 && curWCInfo != null; i--) {
ExtendedControllerState ecstate = guiPath.getExtendedControllerStateAt(i);
curWCInfo.adjustControllerState(back, ecstate, ureq);
if (i >= 1) { // for all but the leaf
ExtendedControllerState extChildState = guiPath.getExtendedControllerStateAt(i-1);
// changeing a controller's state means there are maybe child controllers disposed and others newly created
curWCInfo = findMatchingChild(extChildState, curWCInfo);
// can return null if no child is found (see comments for step 3 above)
if (curWCInfo == null) return;
// else found: proceed with this child and the next guiPath Entry