refreshScrollBehaviour = function(oList){
		if (adaptScollBehavior(oList)) {
			oList.$("lst").addClass("sapUiUx3ExactLstLstExp");

			if (!oList._oPopup) {
				var fPopupEventHandle = function(oEvent){
					oList._handleEvent(oEvent);
				};

				oList._oPopup = new Popup();

				if (!Device.browser.firefox) {
					oList._oPopup._fixPositioning = function(oPosition, bRtl) {
						Popup.prototype._fixPositioning.apply(this, arguments);
						if (bRtl) {
							var $Ref = this._$();
							var $Of = jQuery(oPosition.of);
							var iOffset = 0;
							if (oPosition.offset) {
								iOffset = parseInt(oPosition.offset.split(" ")[0]);
							}
							$Ref.css("right", (jQuery(window).width() - $Of.outerWidth() - $Of.offset().left + iOffset) + "px");
						}
					};
				}

				oList._oPopup.open = function(){
					var jListContRef = oList.$("lst");
					animate(jListContRef, false, -1, function(jRef){
						//Switch the expand icon
						jListContRef.addClass("sapUiUx3ExactLstExpanded");
						oList.$("exp").html(ExactListRenderer.getExpanderSymbol(true, false));
						//Remember the current height for closing later and set the height explicitly
						oList.__sOldHeight = jListContRef.css("height");
						jListContRef.css("height", oList.__sOldHeight);
						var jListHeader = oList.$("head");
						//Calculate the target height
						var jListRef = jQuery(oList._lb.getDomRef());
						var iListHeight = jListRef[0].scrollHeight + oList.$("exp").height() + jListRef.outerHeight() - jListRef.height() + 1;
						var iMaxListHeight = jQuery(window).height() - parseInt(jListRef.offset().top) + jQuery(window).scrollTop() - jListHeader.outerHeight();
						var iTargetHeight = Math.min(iListHeight, iMaxListHeight);
						//Set the list as popup content and open the popup
						oList._oPopup.setContent(jListContRef[0]);
						var sOffset = Parameters.get()["sapUiUx3ExactLst" + (oList._isTop() ? "Root" : "") + "ExpandOffset"] || "0 0";
						Popup.prototype.open.apply(oList._oPopup,
								[0, Popup.Dock.BeginTop, Popup.Dock.BeginBottom, jListHeader[0], sOffset, "none none"]);
						oList._bPopupOpened = true;
						return iTargetHeight;
					}, function(jRef){
						//Update BlindLayer of popup
						jListContRef.addClass("sapUiUx3ExactLstExpandedBL");
						//Adapt the scroll behavior and set the focus
						adaptScollBehavior(oList);
						oList.getFocusDomRef().focus();
						//Bind the event handlers for closing and control events
						ControlEvents.bindAnyEvent(oList._closeHandle);
						jRef.on(ControlEvents.events.join(" "), fPopupEventHandle);
					});
				};
				oList._oPopup.close = function(bSkipFocus){
					var jListContRef = oList.$("lst");
					jListContRef.removeClass("sapUiUx3ExactLstExpandedBL");
					animate(jListContRef, false, oList.__sOldHeight, function(jRef){
						//Unbind the event handlers for closing and control events
						ControlEvents.unbindAnyEvent(oList._closeHandle);
						jRef.off(ControlEvents.events.join(" "), fPopupEventHandle);
						//Switch the expand icon
						jListContRef.removeClass("sapUiUx3ExactLstExpanded");
						oList.$("exp").html(ExactListRenderer.getExpanderSymbol(false, false));
					}, function(jRef){
						//Move the list to its original position
						jRef.detach();
						jListContRef.removeClass("sapUiShd");
						jRef.attr("style", "width:" + oList._iCurrentWidth + "px;");
						jQuery(oList.getDomRef()).prepend(jRef);
						//Cleanup and close the popup
						oList._oPopup.setContent(null);
						oList._bPopupOpened = undefined;
						oList.__sOldHeight = null;
						if (oList._isTop()) {
							jRef.css("bottom", getScrollbarSize().height + "px");
						}
						adaptScollBehavior(oList);
						Popup.prototype.close.apply(oList._oPopup, [0]);
						if (!bSkipFocus) {
							oList.getFocusDomRef().focus();
						}
					});
				};
			}
		}
	}
****** LOCAL HELPERS *********

	//Returns the predecessor of the given list based on the level and whether TAB or the arrow keys are used
	var getPredecessorList = function(oList, bArrow){
		function getPrevOnSameLevel(oLst){
			var oParentRef = oLst.getParent();
			var aParentSubLists = oParentRef.getSubLists();
			var idx = oParentRef.indexOfSubList(oLst) - 1;
			if (idx >= 0) {
				return aParentSubLists[idx];
			}
			return null;
		}

		function getListOrLastChild(oLst){
			var aSubLists = oLst.getSubLists();
			if (aSubLists.length > 0) {
				return getListOrLastChild(aSubLists[aSubLists.length - 1]);
			}
			return oLst;
		}

		if (oList._iLevel == 0) {
			return null;
		} else if (oList._iLevel == 1) {
			if (bArrow) {
				return null;
			}
			var oPrevList = getPrevOnSameLevel(oList);
			if (oPrevList) {
				return oPrevList;
			}
			return oList.getParent();
		} else if (oList._iLevel > 1) {
			var oPrevList = getPrevOnSameLevel(oList);
			if (oPrevList) {
				return getListOrLastChild(oPrevList);
			}
			var oParent = oList.getParent();
			if (oParent._iLevel >= 1) {
				return oParent;
			}
		}
		return null;
	};

	//Returns the successor of the given list based on the level and whether TAB or the arrow keys are used
	var getSuccessorList = function(oList, bArrow){
		function getNextOnSameLevel(oLst){
			var oParent = oLst.getParent();
			var aParentSubLists = oParent.getSubLists();
			var idx = oParent.indexOfSubList(oLst) + 1;
			if (idx < aParentSubLists.length) {
				return aParentSubLists[idx];
			}
			return null;
		}

		function getFirstChild(oLst){
			var aSubLists = oLst.getSubLists();
			if (aSubLists.length > 0) {
				return aSubLists[0];
			}
			return null;
		}

		function getNext(oLst){
			var oNextListRef = getNextOnSameLevel(oLst);
			if (oNextListRef) {
				return oNextListRef;
			}
			var oParent = oLst.getParent();
			if (oParent._iLevel > (bArrow ? 1 : 0)) {
				return getNext(oParent);
			} else {
				return null;
			}
		}

		if (oList._iLevel == 0) {
			return getFirstChild(oList);
		} else if (oList._iLevel == 1) {
			return bArrow ? getFirstChild(oList) : getNextOnSameLevel(oList);
		} else if (oList._iLevel > 1) {
			var oNextList = getFirstChild(oList);
			if (oNextList) {
				return oNextList;
			}

			return getNext(oList);
		}
		return null;
	};

	var fireHeaderPress = function(oList, oEvent, bKeyboard){
		oList.fireEvent("_headerPress", {
			kexboard: bKeyboard,
			domRef: oList.$("head")
		});
		oEvent.stopPropagation();
	};

	var isTopHeaderFocusable = function(oList){
		return !isTopHidden(oList) && oList.$().hasClass("sapUiUx3ExactLstTopActive");
	};

	var isTopHidden = function(oList){
		return oList.$().hasClass("sapUiUx3ExactLstTopHidden");
	};

	//Returns the index in the sublists of the given list for a new list of the given attribute
	var getIndexForNewSubList = function(oList, oAttr){
		if (oList._getAtt().getListOrder() != ExactOrder.Fixed /*Select