 modules/juce_gui_basics/menus/juce_PopupMenu.cpp  |  3 ++-
 modules/juce_gui_basics/menus/juce_PopupMenu.h    |  3 ++-
 modules/juce_gui_basics/widgets/juce_ComboBox.cpp | 12 ++++++++++--
 modules/juce_gui_basics/widgets/juce_ComboBox.h   |  8 +++++++-
 4 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp
index 465cbd7c3..21b2de3bf 100644
--- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp
+++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp
@@ -1371,13 +1371,14 @@ void PopupMenu::addItem (const Item& newItem)
     items.add (new Item (newItem));
 }
 
-void PopupMenu::addItem (int itemResultID, const String& itemText, bool isActive, bool isTicked)
+void PopupMenu::addItem (int itemResultID, const String& itemText, bool isActive, bool isTicked, const String& annotation)
 {
     Item i;
     i.text = itemText;
     i.itemID = itemResultID;
     i.isEnabled = isActive;
     i.isTicked = isTicked;
+    i.shortcutKeyDescription = annotation; /* add custom annotation who override shortcutKeyDescription */ 
     addItem (i);
 }
 
diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.h b/modules/juce_gui_basics/menus/juce_PopupMenu.h
index 7f07e6765..79b6aa281 100644
--- a/modules/juce_gui_basics/menus/juce_PopupMenu.h
+++ b/modules/juce_gui_basics/menus/juce_PopupMenu.h
@@ -192,7 +192,8 @@ public:
     void addItem (int itemResultID,
                   const String& itemText,
                   bool isEnabled = true,
-                  bool isTicked = false);
+                  bool isTicked = false,
+                  const String& annotation = String());
 
     /** Appends a new item with an icon.
 
diff --git a/modules/juce_gui_basics/widgets/juce_ComboBox.cpp b/modules/juce_gui_basics/widgets/juce_ComboBox.cpp
index cf59fa857..294664de6 100644
--- a/modules/juce_gui_basics/widgets/juce_ComboBox.cpp
+++ b/modules/juce_gui_basics/widgets/juce_ComboBox.cpp
@@ -78,7 +78,7 @@ void ComboBox::setTooltip (const String& newTooltip)
 }
 
 //==============================================================================
-void ComboBox::addItem (const String& newItemText, int newItemId)
+void ComboBox::addItem (const String& newItemText, const int newItemId, const String& annotation)
 {
     // you can't add empty strings to the list..
     jassert (newItemText.isNotEmpty());
@@ -90,7 +90,7 @@ void ComboBox::addItem (const String& newItemText, int newItemId)
     jassert (getItemForId (newItemId) == nullptr);
 
     if (newItemText.isNotEmpty() && newItemId != 0)
-        currentMenu.addItem (newItemId, newItemText, true, false);
+        currentMenu.addItem (newItemId, newItemText, true, false, annotation); 
 }
 
 void ComboBox::addItemList (const StringArray& itemsToAdd, int firstItemID)
@@ -199,6 +199,14 @@ String ComboBox::getItemText (const int index) const
     return {};
 }
 
+String ComboBox::getItemAnnotation(const int index) const
+{
+  if (const PopupMenu::Item* const item = getItemForIndex (index))
+    return item->shortcutKeyDescription;
+
+  return String();
+}
+
 int ComboBox::getItemId (const int index) const noexcept
 {
     if (auto* item = getItemForIndex (index))
diff --git a/modules/juce_gui_basics/widgets/juce_ComboBox.h b/modules/juce_gui_basics/widgets/juce_ComboBox.h
index 043eb126a..aa22ecb59 100644
--- a/modules/juce_gui_basics/widgets/juce_ComboBox.h
+++ b/modules/juce_gui_basics/widgets/juce_ComboBox.h
@@ -97,7 +97,7 @@ public:
                                 be 0!
         @see setItemEnabled, addSeparator, addSectionHeading, getNumItems, getItemText, getItemId
     */
-    void addItem (const String& newItemText, int newItemId);
+    void addItem (const String& newItemText, int newItemId, const String& annotation = String());
 
     /** Adds an array of items to the drop-down list.
         The item ID of each item will be its index in the StringArray + firstItemIdOffset.
@@ -159,6 +159,12 @@ public:
     */
     String getItemText (int index) const;
 
+    /** Returns the annotation for one of the items in the list.
+        Note that this doesn't include headers or separators.
+        @param index    the item's index from 0 to (getNumItems() - 1)
+    */
+    String getItemAnnotation(int index) const;
+
     /** Returns the ID for one of the items in the list.
         Note that this doesn't include headers or separators.
         @param index    the item's index from 0 to (getNumItems() - 1)
