diff --git a/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndGroupableComboBox.java b/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndGroupableComboBox.java
index 64e4ef4c3..ec09b355c 100644
--- a/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndGroupableComboBox.java
+++ b/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndGroupableComboBox.java
@@ -213,6 +213,7 @@ public class SearchableAndGroupableComboBox<G extends Group, T extends Groupable
 
 	private JPopupMenu createGroupsPopup() {
 		final JPopupMenu menu = new JPopupMenu();
+		MenuItemMouseListener menuItemListener = new MenuItemMouseListener();
 
 		// Add the search field at the top
 		menu.add(searchFieldGroups);
@@ -226,10 +227,11 @@ public class SearchableAndGroupableComboBox<G extends Group, T extends Groupable
 					super.paintComponent(g);
 					// If the group contains the selected item, draw a checkbox
 					if (containsSelectedItem(group, (T) SearchableAndGroupableComboBox.this.getSelectedItem())) {
-						g.drawString(CHECKMARK, CHECKMARK_X_OFFSET, getHeight() - CHECKMARK_Y_OFFSET); // Unicode for checked checkbox
+						g.drawString(CHECKMARK, CHECKMARK_X_OFFSET, getHeight() - CHECKMARK_Y_OFFSET);
 					}
 				}
 			};
+			groupMenu.addMouseListener(menuItemListener);
 			List<T> itemsForGroup = itemGroupMap.get(group);
 
 			if (itemsForGroup != null) {
@@ -265,6 +267,30 @@ public class SearchableAndGroupableComboBox<G extends Group, T extends Groupable
 		return menu;
 	}
 
+	private class MenuItemMouseListener extends MouseAdapter {
+		private JMenu currentMenu;
+
+		@Override
+		public void mouseEntered(MouseEvent e) {
+			if (e.getSource() instanceof JMenu) {
+				currentMenu = (JMenu) e.getSource();
+				currentMenu.setPopupMenuVisible(true);
+			}
+		}
+
+		@Override
+		public void mouseExited(MouseEvent e) {
+			if (currentMenu != null && !isMouseOverMenu(currentMenu, e.getPoint())) {
+				currentMenu.setPopupMenuVisible(false);
+				currentMenu = null;
+			}
+		}
+
+		private boolean isMouseOverMenu(JMenu menu, Point point) {
+			return menu.getBounds().contains(SwingUtilities.convertPoint(menu.getParent(), point, menu));
+		}
+	}
+
 	private JPopupMenu createSearchPopup() {
 		final JPopupMenu menu = new JPopupMenu();
 		menu.setLayout(new BorderLayout());