code: function _adaptDeepChildObservation(caller, oControl, oAggregation, bObserve) {
  		var aChildren = oAggregation.get(oControl) || [], oChild, bRecord;
  
  		for (var i = 0; i < aChildren.length; i++) {
  			oChild = aChildren[i];
  			if (!(oChild instanceof ManagedObject)) {
  				continue;
  			}
  			bRecord = true;
  
  			if (bObserve) {
  				caller._oObserver.observe(oChild, {
  					properties: true,
  					aggregations: true
  				});
  			} else {
  				caller._oObserver.unobserve(oChild, {
  					properties: true,
  					aggregations: true
  				});
  			}
  
  			var mAggregations = oChild.getMetadata().getAllAggregations();
  
  			for (var sKey in mAggregations) {
  				_adaptDeepChildObservation(caller, oChild, mAggregations[sKey], bObserve);
  			}
  		}
  
  		if (bRecord) {
  			var sKey = oControl.getId() + "/@" + oAggregation.name;
  
  			if (bObserve) {
  				if (!caller._mObservedCount.aggregations[sKey]) {
  					caller._mObservedCount.aggregations[sKey] = 0;
  				}
  				caller._mObservedCount.aggregations[sKey]++;
  			} else {
  				delete caller._mObservedCount.aggregations[sKey];
  			}
  		}
  	}
docs: Adapt the observation of child controls in order to be able to react when e.g. the value
  of a select inside a list changed. Currently the MOM is not updated then
  
  @param {object} the caller, here the managed object model
  @param {control} the control which shall be (un)observed
  @param {object} the observed aggregation
  @param {boolean} <code>true</code> for observing and <code>false</code> for unobserving
  
  @private