public boolean updateHotkeyBinding(String key, HotkeyEntry entry) {
        if (!this.fileLoaded) {
            return false;
        }

        try {
            XMLNode hotkeysNode = this.rootNode.getChildNodesByType("hotkeys")[0];
            XMLNode[] hotkeyNodes = hotkeysNode.getChildNodesByType("hotkey");

            for (XMLNode node : hotkeyNodes) {
                XMLNode name = node.getChildNodesByType("name")[0];
                if (name.getValue().equalsIgnoreCase(key)) {
                    name.setValue(entry.getName());
                    node.getChildNodesByType("comb")[0].setValue(entry.getCombination());

                    if (entry.isTrayPopup()) {
                        node.addParameter(new KeyValue<String, String>("tray-popup", "true"));
                    } else {
                        node.removeParameter("tray-popup");
                    }
                    
                    this._getHotkeys();

                    return true;
                }
            }

            return false;
        } catch (Exception ex) {
            return false;
        }
    }