         self.options.onFlags(flags, block: block)
     }
     
-    func onKey(key: String, block: OptionsKeyBlock?, usage: String = "", valueSignature: String = "value") { // TODO: Add final modifier once possible
+    final func onKey(key: String, block: OptionsKeyBlock?, usage: String = "", valueSignature: String = "value") {
         self.onKeys([key], block: block, usage: usage, valueSignature: valueSignature)
     }
     
-    func onKeys(keys: [String], block: OptionsKeyBlock?, usage: String = "", valueSignature: String = "value") { // TODO: Add final modifier once possible
+    final func onKeys(keys: [String], block: OptionsKeyBlock?, usage: String = "", valueSignature: String = "value") {
         let comps = ", ".join(keys)
         let firstPart = "\(comps) <\(valueSignature)>"
         let padded = self.padString(usage, toLength: 40, firstComponent: firstPart)

    
    // MARK: On options
    
    func onFlag(flag: String, block: OptionsFlagBlock?, usage: String = "") { // TODO: Add final modifier once possible
        self.onFlags([flag], block: block, usage: usage)
    }
    
    func onFlags(flags: [String], block: OptionsFlagBlock?, usage: String = "") { // TODO: Add final modifier once possible
        let comps = ", ".join(flags)
        let padded = self.padString(usage, toLength: 40, firstComponent: comps)
        self.usageStatements.append("\(comps)\(padded)")

    
    // MARK: - Options
    
    final func optionsAccountedFor() -> Bool {
        self.handleOptions()
        
        if self.showHelpOnHFlag() {
