diff --git a/src/uibuttons.cpp b/src/uibuttons.cpp
index 7d70364..fd7b676 100644
--- a/src/uibuttons.cpp
+++ b/src/uibuttons.cpp
@@ -364,3 +364,11 @@ void CUIButtons::Update (void)
 	}
 }
 
+void CUIButtons::ResetButton (unsigned pinNumber)
+{
+	for (unsigned i=0; i<MAX_BUTTONS; i++) {
+		if (m_buttons[i].getPinNumber() == pinNumber) {
+			m_buttons[i].reset();
+		}
+	}
+}
diff --git a/src/uibuttons.h b/src/uibuttons.h
index 2070018..4bb9408 100644
--- a/src/uibuttons.h
+++ b/src/uibuttons.h
@@ -113,6 +113,8 @@ public:
 	void RegisterEventHandler (BtnEventHandler *handler, void *param = 0);
 	
 	void Update (void);
+
+	void ResetButton (unsigned pinNumber);
 	
 private:
 	// Up to 5 buttons can be defined
diff --git a/src/userinterface.cpp b/src/userinterface.cpp
index 034565c..26af48d 100644
--- a/src/userinterface.cpp
+++ b/src/userinterface.cpp
@@ -224,13 +224,26 @@ void CUserInterface::EncoderEventHandler (CKY040::TEvent Event)
 		break;
 
 	case CKY040::EventClockwise:
-		m_Menu.EventHandler (m_bSwitchPressed ? CUIMenu::MenuEventPressAndStepUp
-						      : CUIMenu::MenuEventStepUp);
+		if (m_bSwitchPressed) {
+			// We must reset the encoder switch button to prevent events from being
+			// triggered after the encoder is rotated
+			m_pUIButtons->ResetButton(m_pConfig->GetEncoderPinSwitch());
+			m_Menu.EventHandler(CUIMenu::MenuEventPressAndStepUp);
+
+		}
+		else {
+			m_Menu.EventHandler(CUIMenu::MenuEventStepUp);
+		}
 		break;
 
 	case CKY040::EventCounterclockwise:
-		m_Menu.EventHandler (m_bSwitchPressed ? CUIMenu::MenuEventPressAndStepDown
-						      : CUIMenu::MenuEventStepDown);
+		if (m_bSwitchPressed) {
+			m_pUIButtons->ResetButton(m_pConfig->GetEncoderPinSwitch());
+			m_Menu.EventHandler(CUIMenu::MenuEventPressAndStepDown);
+		}
+		else {
+			m_Menu.EventHandler(CUIMenu::MenuEventStepDown);
+		}
 		break;
 
 	case CKY040::EventSwitchHold: