diff --git a/Source/DasherVR/Private/SDasherWidget.cpp b/Source/DasherVR/Private/SDasherWidget.cpp
index cdf2cbe3b20d75e20fa450e4aa25ee4b92777976..0aff028dbae59e5e774dfe875a425f4278ea5bb6 100644
--- a/Source/DasherVR/Private/SDasherWidget.cpp
+++ b/Source/DasherVR/Private/SDasherWidget.cpp
@@ -38,13 +38,13 @@ FReply SDasherWidget::OnMouseButtonDown(const FGeometry& MyGeometry, const FPoin
 
 	FMouseState& MouseState = GetMouseState(MouseEvent.GetPointerIndex());
 
-	if(MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton)
+	if(MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton && !MouseState.PrimaryButtonPressed)
 	{
 		DasherMainInterface->KeyDown(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Primary_Input);
 		MouseState.PrimaryButtonPressed = true;
 		MouseListeners.ExecuteIfBound(MouseEvent.GetPointerIndex(), MouseState.PrimaryButtonPressed);
 	}
-	else if(MouseEvent.GetEffectingButton() == EKeys::RightMouseButton)
+	else if(MouseEvent.GetEffectingButton() == EKeys::RightMouseButton && !MouseState.SecondaryButtonPressed)
 	{
 		DasherMainInterface->KeyDown(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Secondary_Input);
 		MouseState.SecondaryButtonPressed = true;
@@ -127,9 +127,10 @@ void SDasherWidget::OnMouseLeave(const FPointerEvent& MouseEvent)
 {
 	SWidget::OnMouseLeave(MouseEvent);
 
-    if (InputPaused) return;
-
 	FMouseState& MouseState = GetMouseState(MouseEvent.GetPointerIndex());
+	MouseState.CurrentlyHovering = false;
+
+	if (InputPaused) return;
 
 	if(MouseState.PrimaryButtonPressed)
 	{
@@ -144,8 +145,6 @@ void SDasherWidget::OnMouseLeave(const FPointerEvent& MouseEvent)
 		BoostListeners.ExecuteIfBound(MouseEvent.GetPointerIndex(), false);
 		MouseState.DisabledDueToMouseLeave = true;
 	}
-
-	MouseState.CurrentlyHovering = false;
 }
 
 FReply SDasherWidget::OnMouseButtonDoubleClick(const FGeometry& InMyGeometry, const FPointerEvent& InMouseEvent)
@@ -157,13 +156,13 @@ FReply SDasherWidget::OnMouseButtonUp(const FGeometry& MyGeometry, const FPointe
 {
 	FMouseState& MouseState = GetMouseState(MouseEvent.GetPointerIndex());
 
-	if(MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton)
+	if(MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton && MouseState.PrimaryButtonPressed)
 	{
 		DasherMainInterface->KeyUp(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Primary_Input);
 		MouseState.PrimaryButtonPressed = false;
 		MouseListeners.ExecuteIfBound(MouseEvent.GetPointerIndex(), MouseState.PrimaryButtonPressed);
 	}
-	else if(MouseEvent.GetEffectingButton() == EKeys::RightMouseButton)
+	else if(MouseEvent.GetEffectingButton() == EKeys::RightMouseButton && MouseState.SecondaryButtonPressed)
 	{
 		DasherMainInterface->KeyUp(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Secondary_Input);
 		MouseState.SecondaryButtonPressed = false;