@Override
  public void perform() throws MassiveException {
    // Arg: Faction
    Faction faction = this.arg(0, ARFaction.get(), msenderFaction);

    List<MFlag> flags = new ArrayList<MFlag>();

    // Case: Show All
    if (!this.argIsSet(1) || "all".equalsIgnoreCase(this.arg(1))) {
      for (MFlag mflag : MFlag.getAll()) {
        if (!mflag.isVisible() && !msender.isUsingAdminMode()) continue;
        flags.add(mflag);
      }
    } else {
      // Arg: MFlag. Maybe we should use ARSet but that is currently buggy.
      List<MFlag> mflags = this.arg(this.argConcatFrom(1), ARList.get(ARMFlag.get()));
      flags.addAll(mflags);
    }

    // Create messages
    List<String> messages = new ArrayList<String>();
    messages.add(Txt.titleize("Flag for " + faction.describeTo(msender, true)));
    for (MFlag mflag : flags) {
      messages.add(mflag.getStateDesc(faction.getFlag(mflag), true, true, true, true, true));
    }

    // Send messages
    sendMessage(messages);
  }