diff --git a/client/adventureMap/CList.cpp b/client/adventureMap/CList.cpp
index 48387bc31..17bacee15 100644
--- a/client/adventureMap/CList.cpp
+++ b/client/adventureMap/CList.cpp
@@ -305,27 +305,12 @@ void CHeroList::CHeroItem::gesture(bool on, const Point & initialPosition, const
 	GH.windows().createAndPushWindow<RadialMenu>(pos.center(), menuElements, true);
 }
 
-bool CHeroList::CHeroItem::captureThisKey(EShortcut key)
-{
-
-	switch(key)
-	{
-	case EShortcut::LIST_HERO_UP:
-	case EShortcut::LIST_HERO_DOWN:
-	case EShortcut::LIST_HERO_TOP:
-	case EShortcut::LIST_HERO_BOTTOM:
-	case EShortcut::LIST_HERO_DELETE:
-		return hero && pos.isInside(GH.getCursorPosition());
-	}
-	return false;
-}
-
 void CHeroList::CHeroItem::keyPressed(EShortcut key)
 {
 	if(!hero)
 		return;
 
-	if(!pos.isInside(GH.getCursorPosition()))
+	if(parent->selected != this->shared_from_this())
 		return;
 
 	auto & heroes = LOCPLINT->localState->getWanderingHeroes();
@@ -512,23 +497,9 @@ void CTownList::CTownItem::gesture(bool on, const Point & initialPosition, const
 	GH.windows().createAndPushWindow<RadialMenu>(pos.center(), menuElements, true);
 }
 
-bool CTownList::CTownItem::captureThisKey(EShortcut key)
-{
-
-	switch(key)
-	{
-	case EShortcut::LIST_TOWN_UP:
-	case EShortcut::LIST_TOWN_DOWN:
-	case EShortcut::LIST_TOWN_TOP:
-	case EShortcut::LIST_TOWN_BOTTOM:
-		return town && pos.isInside(GH.getCursorPosition());
-	}
-	return false;
-}
-
 void CTownList::CTownItem::keyPressed(EShortcut key)
 {
-	if(!pos.isInside(GH.getCursorPosition()))
+	if(parent->selected != this->shared_from_this())
 		return;
 
 	const std::vector<const CGTownInstance *> towns = LOCPLINT->localState->getOwnedTowns();
diff --git a/client/adventureMap/CList.h b/client/adventureMap/CList.h
index 157a4866e..bccd4fecf 100644
--- a/client/adventureMap/CList.h
+++ b/client/adventureMap/CList.h
@@ -29,9 +29,10 @@ class CList : public Scrollable
 protected:
 	class CListItem : public CIntObject, public std::enable_shared_from_this<CListItem>
 	{
-		CList * parent;
 		std::shared_ptr<CIntObject> selection;
 	public:
+		CList * parent;
+
 		CListItem(CList * parent);
 		~CListItem();
 
@@ -55,9 +56,6 @@ protected:
 
 private:
 	const size_t size;
-
-	//for selection\deselection
-	std::shared_ptr<CListItem> selected;
 	void select(std::shared_ptr<CListItem> which);
 	friend class CListItem;
 
@@ -81,6 +79,9 @@ protected:
 	void update();
 
 public:
+	//for selection\deselection
+	std::shared_ptr<CListItem> selected;
+
 	/// functions that will be called when selection changes
 	CFunctionList<void()> onSelect;
 
@@ -128,7 +129,6 @@ class CHeroList	: public CList
 		void open() override;
 		void showTooltip() override;
 		void gesture(bool on, const Point & initialPosition, const Point & finalPosition) override;
-		bool captureThisKey(EShortcut key) override;
 		void keyPressed(EShortcut key) override;
 		std::string getHoverText() override;
 	};
@@ -164,7 +164,6 @@ class CTownList	: public CList
 		void open() override;
 		void showTooltip() override;
 		void gesture(bool on, const Point & initialPosition, const Point & finalPosition) override;
-		bool captureThisKey(EShortcut key) override;
 		void keyPressed(EShortcut key) override;
 		std::string getHoverText() override;
 	};
diff --git a/config/shortcutsConfig.json b/config/shortcutsConfig.json
index 668184dc0..ad1b25a36 100644
--- a/config/shortcutsConfig.json
+++ b/config/shortcutsConfig.json
@@ -242,15 +242,15 @@
 		"townOpenThievesGuild":     "G",
 		"townOpenVisitingHero":     "Ctrl+H",
 		"townSwapArmies":           "Space",
-		"listHeroUp":               "PageUp",
-		"listHeroDown":             "PageDown",
-		"listHeroTop":              "Home",
-		"listHeroBottom":           "End",
+		"listHeroUp":               "Ctrl+PageUp",
+		"listHeroDown":             "Ctrl+PageDown",
+		"listHeroTop":              "Ctrl+Home",
+		"listHeroBottom":           "Ctrl+End",
 		"listHeroDelete":           "Delete",
-		"listTownUp":               "PageUp",
-		"listTownDown":             "PageDown",
-		"listTownTop":              "Home",
-		"listTownBottom":           "End",
+		"listTownUp":               "Ctrl+PageUp",
+		"listTownDown":             "Ctrl+PageDown",
+		"listTownTop":              "Ctrl+Home",
+		"listTownBottom":           "Ctrl+End",
 		
 		// Controller-specific
 		"mouseCursorX":             [],