@Override
  public boolean execute(ScrollingMenuSign plugin, Player player, String[] args)
      throws SMSException {

    String menuName = args[0];

    String sep = SMSConfig.getConfig().getString("sms.menuitem_separator", "|");
    List<String> items;
    if (args[1].contains(sep)) {
      items = Arrays.asList(combine(args, 1).split(Pattern.quote(sep)));
      String[] usage = getUsage();
      MiscUtil.statusMessage(player, "&6NOTE: preferred syntax is now &f" + usage[0]);
      MiscUtil.statusMessage(
          player, " &6(label/command/message can be quoted if they contain whitespace)");
    } else {
      items = new ArrayList<String>();
      for (int i = 1; i < args.length; i++) {
        items.add(args[i]);
      }
    }

    SMSMenu menu = plugin.getHandler().getMenu(menuName);

    if (items.size() < 2 && menu.getDefaultCommand().isEmpty()) {
      throw new SMSException("Missing command and feedback message");
    }

    String label = MiscUtil.parseColourSpec(player, items.get(0));
    String cmd = items.size() >= 2 ? items.get(1) : "";
    String msg = items.size() >= 3 ? items.get(2) : "";

    if (player != null && !new CommandParser().verifyCreationPerms(player, cmd)) {
      throw new SMSException("You do not have permission to add that kind of command.");
    }

    menu.addItem(label, cmd, msg);
    menu.notifyObservers(SMSMenuAction.REPAINT);

    MiscUtil.statusMessage(player, "Menu entry &f" + label + "&- added to: &e" + menuName);

    return true;
  }