Index: NoesisInstance.cpp
===================================================================
--- NoesisInstance.cpp	(revision 16500)
+++ NoesisInstance.cpp	(working copy)
@@ -1234,24 +1234,23 @@
 {
 	NoesisHitTestVisibleTester(): Hit(nullptr) { }
 
-	Noesis::HitTestFilterBehavior Filter(Noesis::Visual*)
+	Noesis::HitTestFilterBehavior Filter(Noesis::Visual* Visual)
 	{
+		Noesis::UIElement* Element = Noesis::DynamicCast<Noesis::UIElement*>(Visual);
+		if (Element != nullptr && !Element->GetIsHitTestVisible())
+		{
+			return Noesis::HitTestFilterBehavior_ContinueSkipSelfAndChildren;
+		}
 		return Noesis::HitTestFilterBehavior_Continue;
 	}
 
 	Noesis::HitTestResultBehavior Result(const Noesis::HitTestResult& Result)
 	{
-		Noesis::UIElement* Element = Noesis::DynamicCast<Noesis::UIElement*>(Result.visualHit);
-		if (Element && Element->GetIsEnabled())
-		{
-			Hit = Element;
-			return Noesis::HitTestResultBehavior_Stop;
-		}
-
-		return Noesis::HitTestResultBehavior_Continue;
+		Hit = Result.visualHit;
+		return Noesis::HitTestResultBehavior_Stop;
 	}
 
-	Noesis::UIElement* Hit;
+	Noesis::Visual* Hit;
 };
 
 bool UNoesisInstance::HitTest(FVector2D Position) const
@@ -1800,9 +1799,9 @@
 			bool Hit = HitTest(Position);
 
 			Noesis::MouseButton MouseButton = GetNoesisMouseButton(MouseEvent.GetEffectingButton());
-			bool Handled = XamlView->MouseButtonDown(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), MouseButton) || HasMouseCapture();
+			XamlView->MouseButtonDown(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), MouseButton) || HasMouseCapture();
 
-			if (Handled && Hit)
+			if (Hit)
 			{
 				auto Reply = FReply::Handled().PreventThrottling();
 				if (SetUserFocusToViewport)
@@ -1846,9 +1845,9 @@
 			bool Hit = HitTest(Position);
 
 			Noesis::MouseButton MouseButton = GetNoesisMouseButton(MouseEvent.GetEffectingButton());
-			bool Handled = XamlView->MouseButtonUp(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), MouseButton) || HasMouseCapture();
+			XamlView->MouseButtonUp(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), MouseButton) || HasMouseCapture();
 
-			if (Handled && Hit)
+			if (Hit)
 			{
 				auto Reply = FReply::Handled().PreventThrottling();
 				if (SetUserFocusToViewport)
@@ -1879,9 +1878,9 @@
 		FVector2D Position = MyGeometry.AbsoluteToLocal(MouseEvent.GetScreenSpacePosition()) * MyGeometry.Scale;
 		bool Hit = HitTest(Position);
 
-		bool Handled = XamlView->MouseMove(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y)) || HasMouseCapture();
+		XamlView->MouseMove(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y)) || HasMouseCapture();
 
-		if (Handled && Hit)
+		if (Hit)
 		{
 			auto Reply = FReply::Handled().PreventThrottling();
 			if (SetUserFocusToViewport)
@@ -1912,9 +1911,9 @@
 		bool Hit = HitTest(Position);
 
 		float WheelDelta = MouseEvent.GetWheelDelta();
-		bool Handled = XamlView->MouseWheel(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), FPlatformMath::RoundToInt(WheelDelta * 120.f));
+		XamlView->MouseWheel(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), FPlatformMath::RoundToInt(WheelDelta * 120.f));
 
-		if (Handled && Hit)
+		if (Hit)
 		{
 			auto Reply = FReply::Handled().PreventThrottling();
 			if (HasMouseCapture())
@@ -1941,9 +1940,9 @@
 		bool Hit = HitTest(Position);
 
 		uint32 PointerIndex = TouchEvent.GetPointerIndex();
-		bool Handled = XamlView->TouchDown(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), PointerIndex);
+		XamlView->TouchDown(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), PointerIndex);
 
-		if (Handled && Hit)
+		if (Hit)
 		{
 			auto Reply = FReply::Handled().PreventThrottling();
 			if (HasMouseCapture())
@@ -1970,9 +1969,9 @@
 		bool Hit = HitTest(Position);
 
 		uint32 PointerIndex = TouchEvent.GetPointerIndex();
-		bool Handled = XamlView->TouchMove(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), PointerIndex);
+		XamlView->TouchMove(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), PointerIndex);
 
-		if (Handled && Hit)
+		if (Hit)
 		{
 			auto Reply = FReply::Handled().PreventThrottling();
 			if (HasMouseCapture())
@@ -1999,9 +1998,9 @@
 		bool Hit = HitTest(Position);
 
 		uint32 PointerIndex = TouchEvent.GetPointerIndex();
-		bool Handled = XamlView->TouchUp(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), PointerIndex);
+		XamlView->TouchUp(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), PointerIndex);
 
-		if (Handled && Hit)
+		if (Hit)
 		{
 			auto Reply = FReply::Handled().PreventThrottling();
 			if (HasMouseCapture())
@@ -2028,9 +2027,9 @@
 		bool Hit = HitTest(Position);
 
 		Noesis::MouseButton MouseButton = GetNoesisMouseButton(MouseEvent.GetEffectingButton());
-		bool Handled = XamlView->MouseDoubleClick(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), MouseButton);
+		XamlView->MouseDoubleClick(FPlatformMath::RoundToInt(Position.X), FPlatformMath::RoundToInt(Position.Y), MouseButton);
 
-		if (Handled && Hit)
+		if (Hit)
 		{
 			auto Reply = FReply::Handled().PreventThrottling();
 			if (HasMouseCapture())
