Index: NoesisGUI.uplugin
===================================================================
--- NoesisGUI.uplugin	(revision 11845)
+++ NoesisGUI.uplugin	(working copy)
@@ -28,5 +28,11 @@
 			"Type": "Editor",
 			"LoadingPhase": "Default"
 		}
+	],
+	"Plugins": [
+		{
+		  "Name": "CommonUI",
+		  "Enabled": false
+		}
 	]
 }
\ No newline at end of file
Index: Source/NoesisRuntime/Classes/NoesisInstance.h
===================================================================
--- Source/NoesisRuntime/Classes/NoesisInstance.h	(revision 11846)
+++ Source/NoesisRuntime/Classes/NoesisInstance.h	(working copy)
@@ -129,6 +129,7 @@
 	float CurrentTime;
 	FSceneInterface* Scene;
 	FGameTime WorldTime;
+	bool IsGamepadSimulatedClick = false;
 
 	typedef TSharedPtr<class FNoesisSlateElement, ESPMode::ThreadSafe> FNoesisSlateElementPtr;
 	FNoesisSlateElementPtr NoesisSlateElement;
Index: Source/NoesisRuntime/NoesisRuntime.Build.cs
===================================================================
--- Source/NoesisRuntime/NoesisRuntime.Build.cs	(revision 11846)
+++ Source/NoesisRuntime/NoesisRuntime.Build.cs	(working copy)
@@ -98,5 +98,32 @@
 		{
 			PrivateDefinitions.Add("WITH_ENHANCED_INPUT=0");
 		}
+		
+		bool WithCommonUI = false;
+		if (Target.ProjectFile != null)
+		{
+			var Project = ProjectDescriptor.FromFile(Target.ProjectFile);
+
+			if (Project.Plugins != null)
+			{
+				WithCommonUI = (Array.Find(Project.Plugins, p => { return p.Name == "CommonUI"; }) != null);
+			}
+		}
+
+		if (WithCommonUI)
+		{
+			System.Console.WriteLine("NoesisGUI: It looks like your project is using the CommonUI plugin. The warning below is harmless but, if you want to get rid of it, you can edit NoesisGUI.uplugin and change the CommonUI plugin dependency to be enabled.");
+			PublicDependencyModuleNames.AddRange(
+				new string[]
+				{
+					"CommonInput"
+				}
+			);
+			PublicDefinitions.Add("WITH_COMMON_UI=1");
+		}
+		else
+		{
+			PublicDefinitions.Add("WITH_COMMON_UI=0");
+		}
 	}
 }
Index: Source/NoesisRuntime/Private/NoesisInstance.cpp
===================================================================
--- Source/NoesisRuntime/Private/NoesisInstance.cpp	(revision 11846)
+++ Source/NoesisRuntime/Private/NoesisInstance.cpp	(working copy)
@@ -53,6 +53,11 @@
 #include "NoesisSupport.h"
 #include "Extensions/BackgroundImage.h"
 
+#if WITH_COMMON_UI
+// CommonInput includes
+#include "CommonInputSubsystem.h"
+#endif
+
 DECLARE_CYCLE_STAT(TEXT("Update"), STAT_NoesisInstance_Update, STATGROUP_Noesis);
 DECLARE_CYCLE_STAT(TEXT("UpdateRenderTree"), STAT_NoesisInstance_UpdateRenderTree, STATGROUP_Noesis);
 DECLARE_CYCLE_STAT(TEXT("RenderOffscreen"), STAT_NoesisInstance_DrawOffscreen, STATGROUP_Noesis);
@@ -1233,8 +1238,8 @@
 	KeyMap.Add(EKeys::Gamepad_LeftStick_Left, Noesis::Key_GamepadLeft);
 	KeyMap.Add(EKeys::Gamepad_DPad_Right, Noesis::Key_GamepadRight);
 	KeyMap.Add(EKeys::Gamepad_LeftStick_Right, Noesis::Key_GamepadRight);
-	KeyMap.Add(EKeys::Gamepad_FaceButton_Bottom, Noesis::Key_GamepadAccept);
-	KeyMap.Add(EKeys::Gamepad_FaceButton_Right, Noesis::Key_GamepadCancel);
+	KeyMap.Add(EKeys::Virtual_Accept, Noesis::Key_GamepadAccept);
+	KeyMap.Add(EKeys::Virtual_Back, Noesis::Key_GamepadCancel);
 	KeyMap.Add(EKeys::Gamepad_LeftShoulder, Noesis::Key_GamepadPageLeft);
 	KeyMap.Add(EKeys::Gamepad_RightShoulder, Noesis::Key_GamepadPageRight);
 	KeyMap.Add(EKeys::Gamepad_LeftTrigger, Noesis::Key_GamepadPageUp);
@@ -1319,16 +1324,35 @@
 	SCOPE_CYCLE_COUNTER(STAT_NoesisInstance_OnMouseButtonDown);
 	if (XamlView)
 	{
-		FVector2D Position = MyGeometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition()) * MyGeometry.Scale;
-		bool hit = HitTest(Position);
+#if WITH_COMMON_UI
+		ULocalPlayer* LocalPlayer = GetOwningLocalPlayer();
+		if (LocalPlayer != nullptr)
+		{
+			if (UCommonInputSubsystem* CommonInputSubsystem = UCommonInputSubsystem::Get(GetOwningLocalPlayer()))
+			{
+				IsGamepadSimulatedClick = CommonInputSubsystem->GetIsGamepadSimulatedClick();
+			}
+		}
+#endif
 
-		Noesis::MouseButton MouseButton = GetNoesisMouseButton(MouseEvent.GetEffectingButton());
-		XamlView->MouseButtonDown(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), MouseButton);
-
-		if (hit)
+		if (IsGamepadSimulatedClick)
 		{
-			return FReply::Handled().PreventThrottling();
+			XamlView->KeyDown(Noesis::Key_GamepadAccept);
+			return FReply::Handled().PreventThrottling().CaptureMouse(MyWidget.Pin().ToSharedRef());
 		}
+		else
+		{
+			FVector2D Position = MyGeometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition()) * MyGeometry.Scale;
+			bool hit = HitTest(Position);
+
+			Noesis::MouseButton MouseButton = GetNoesisMouseButton(MouseEvent.GetEffectingButton());
+			XamlView->MouseButtonDown(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), MouseButton);
+
+			if (hit)
+			{
+				return FReply::Handled().PreventThrottling();
+			}
+		}
 	}
 
 	return FReply::Unhandled();
@@ -1339,16 +1363,25 @@
 	SCOPE_CYCLE_COUNTER(STAT_NoesisInstance_OnMouseButtonUp);
 	if (XamlView)
 	{
-		FVector2D Position = MyGeometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition()) * MyGeometry.Scale;
-		bool hit = HitTest(Position);
-
-		Noesis::MouseButton MouseButton = GetNoesisMouseButton(MouseEvent.GetEffectingButton());
-		XamlView->MouseButtonUp(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), MouseButton);
-
-		if (hit)
+		if (IsGamepadSimulatedClick)
 		{
+			IsGamepadSimulatedClick = false;
+			XamlView->KeyUp(Noesis::Key_GamepadAccept);
 			return FReply::Handled().PreventThrottling();
 		}
+		else
+		{
+			FVector2D Position = MyGeometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition()) * MyGeometry.Scale;
+			bool hit = HitTest(Position);
+
+			Noesis::MouseButton MouseButton = GetNoesisMouseButton(MouseEvent.GetEffectingButton());
+			XamlView->MouseButtonUp(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), MouseButton);
+
+			if (hit)
+			{
+				return FReply::Handled().PreventThrottling();
+			}
+		}
 	}
 
 	return FReply::Unhandled();
