og);

			int result = messageDialog.Run();

			if ((ResponseType)result == ResponseType.Cancel)
			{
				arguments.SetResult(arguments.Cancel);
			}
			else if ((ResponseType)result == ResponseType.Reject)
			{
				arguments.SetResult(arguments.Destruction);
			}

			messageDialog.Destroy();
		}

		private static void SetDialogTitle(string title, MessageDialog messageDialog)
		{
			messageDialog.Title = title ?? string.Empty;
		}

		private static void SetButtonText(string text, ButtonsType type, MessageDialog messageDialog)
		{
			string gtkLabel = string.Empty;

			switch (type)
			{
				case ButtonsType.Ok:
					gtkLabel = "gtk-ok";
					break;
				case ButtonsType.Cancel:
					gtkLabel = "gtk-cancel";
					break;
			}

			var buttonsBox = messageDialog.GetDescendants()
				.OfType<HButtonBox>()
				.FirstOrDefault();

			if (buttonsBox == null) return;

			var targetButton = buttonsBox.GetDescendants()
				.OfType<Gtk.Button>()
				.FirstOrDefault(x => x.Label == gtkLabel);

			if (targetButton == null) return;

			if (string.IsNullOrEmpty(text))
			{
				targetButton.Hide();
			}
			else
			{
				targetButton.Label = text;
			}
		}

		private static void SetDestructionButton(string destruction, MessageDialog messageDialog)
		{
			if (!string.IsNullOrEmpty(destruction))
			{
				var destructionButton =
					messageDialog.AddButton(destruction, ResponseType.Reject) as Gtk.Button;

				var destructionColor = Color.Red.ToGtkColor();
				destructionButton.Child.ModifyFg(StateType.Normal, destructionColor);
				destructionButton.Child.ModifyFg(StateType.Prelight, destructionColor);
				destructionButton.Child.ModifyFg(StateType.Active, destructionColor);
			}
		}

		private static void AddExtraButtons(ActionSheetArguments arguments, MessageDialog messageDialog)
		{
			var vbox = messageDialog.VBox;

			// As we are not showing any message in this dialog, we just 
			// hide default container and avoid it from using space
			vbox.Children[0].Hide();

			if (arguments.Buttons.Any())
			{
				for (int i = 0; i < argu