function fnHandleMenuItems(aButtons, oModifier, oAppComponent, oMenu, oParent, sParentAggregation, oView, oChangeContent, oRevertData) {
		var sPropertyEnabled = "";
		var sPropertyVisible = "";
		var sOR = "";
		var aMenuButtonModels = [];
		var bIsRtl = Localization.getRTL();
		var aMenuButtonName = [];

		return aButtons.reduce(function(oPreviousPromise, oButton, index) {
			var oIdToSave;
			var iIndex = index;
			var oMenuItem;
			var oManagedObjectModel;
			var oSelector = oChangeContent.buttonsIdForSave[iIndex];
			var sButtonText;
			var sModelName = "$sap.m.flexibility.MenuButtonModel" + iIndex;
			return oPreviousPromise
				.then(oModifier.getProperty.bind(oModifier, oButton, "text"))
				.then(function(sRetrievedButtonText) {
					sButtonText = sRetrievedButtonText;
					return oModifier.createControl("sap.m.MenuItem", oAppComponent, oView, oSelector);
				})
				.then(function(oCreatedMenuItem) {
					oMenuItem = oCreatedMenuItem;
					// Save the original position of the button
					return oModifier.findIndexInParentAggregation(oButton);
				})
				.then(function(iIndexInParentAggregation) {
					oRevertData.insertIndexes[iIndex] = iIndexInParentAggregation;
					return oModifier.createControl(
						"sap.ui.fl.util.ManagedObjectModel",
						oAppComponent,
						oView,
						Object.assign({}, oSelector, {
							id: oSelector.id + '-managedObjectModel'
						}),
						{
							object: oButton,
							name: sCombineButtonsModelName
						}
					);
				})
				.then(function(oCreatedManagedObjectModel) {
					oManagedObjectModel = oCreatedManagedObjectModel;
					// ManagedObjectModel should be placed in `dependents` aggregation of MenuItem
					return oModifier.insertAggregation(oMenuItem, "dependents", oManagedObjectModel, 0, oView);
				})
				.then(function () {
					return oModifier.createControl(
						"sap.ui.core.CustomData",
						oAppComponent,
						oView,
						Object.assign({}, oSelector, {
							id: oSelector.id + '-customData'
						}),
						{
							key: "{ path: '" + sCombineButtonsModelName + ">key' }",
							value: "{ path: '" + sCombineButtonsModelName + ">value' }"
						}
					);
				})
				.then(function(oCustomData) {
					oModifier.bindProperty(oMenuItem, "text", sCombineButtonsModelName + ">/text");
					oModifier.bindProperty(oMenuItem, "icon", sCombineButtonsModelName + ">/icon");
					oModifier.bindProperty(oMenuItem, "enabled", sCombineButtonsModelName + ">/enabled");
					oModifier.bindProperty(oMenuItem, "visible", sCombineButtonsModelName + ">/visible");
					return oModifier.bindAggregation(oMenuItem, "customData", {
						path: sCombineButtonsModelName + ">/customData",
						template: oCustomData,
						templateShareable: false
					}, oView);
				})
				.then(function() {
					// FIXME: will not work in XML in case original button has a binding on `text` property
					if (sButtonText) {
						bIsRtl ? aMenuButtonName.unshift(sButtonText) : aMenuButtonName.push(sButtonText);
					}
					// Add suffix to the id, so we can get the original ids of the combined buttons
					// when we want to split the menu. The suffix is used in SplitMenuButton change handler.
					var oNewSelector = Object.assign({}, oSelector, {
						id: oSelector.id + '-originalButtonId'
					});

					// Create CustomData, holding the original ids of the combined buttons
					return oModifier.createControl("sap.ui.core.CustomData", oAppComponent, oView, oNewSelector);
				})
				.then(function(oRetrievedId) {
					oIdToSave = oRetrievedId;
					oModifier.setProperty(oIdToSave, "key", "originalButtonId");
					oModifier.setProperty(oIdToSave, "value", oModifier.getId(oButton));
					// FIXME: fix implementation of ObjectPageDynamicHeaderTitle and remove next line
					return oModifier.removeAggregation(oParent, sParentAggregation, oButton);
				})

				// Adding each button control to the container's dependents aggregation
				.then(function() {
					return oModifier.insertAggregation(oParent, "dependents", oButton, 0, oView);
				})

				// Saving original ID to original button to avoid conflict with aggregation binding for customData aggregation.
				// The new MenuItem will receive this data via ManagedObjectModel synchronization.
				.then(function() {
					oModifier.insertAggregation(oButton, "customData", oIdToSave, 0, oView);
				})
				.then(function() {
					oModifier.insertAggregation(oMenu, "items", oMenuItem, iIndex, oView);
				})

				// Create ManagedObjectModel for every MenuItem
				// later it will be placed in dependents aggregation of the MenuButton
				// and enabled and visibility properties of each item will be bound to the enabled and visibility property of the MenuButton
				.then(function() {
					return oModifier.createControl(
						"sap.ui.fl.util.ManagedObjectModel",
						oAppComponent,
						oView,
						Object.assign({}, oSelector, {
							id: oSelector.id + '-managedObjectModelMenuItem'
						}),
						{
							object: oMenuItem,
							name: sModelName
						}
					);
				})
				.then(function(oCreatedMenuButtonModel) {
					aMenuButtonModels[iIndex] = oCreatedMenuButtonModel;
					// create binding expression for the visibility and enabled property of the MenuButton
					sPropertyEnabled = sPropertyEnabled + sOR + "${" + sModelName + ">/enabled}";
					sPropertyVisible = sPropertyVisible + sOR + "${" + sModelName + ">/visible}";
					sOR = " || ";
					return {
						menuButtonModels: aMenuButtonModels,
						menuButtonName: aMenuButtonName,
						propertyEnabled: sPropertyEnabled,
						propertyVisible: sPropertyVisible
					};
				});
			}, Promise.resolve());
	}
Change handler for combining sap.m.Button(s) in a sap.m.MenuButton inside sap.m.Bar

@alias sap.m.changeHandler.CombineButtons
@author SAP SE
@version ${version}
@experimental Since 1.48