 }
 
 
-public extension Command {
+extension Command {
 
     public var optionNames : [String] {
         return options.map() { $0.name }

        options[i].set = true
    }
    
    var hasRequiredArguments : Bool {
        return !arguments.isEmpty
    }

    var argumentNames : [String] {
        return arguments.map() { $0.name }
    }
    
    var allArgumentsSet : Bool {
        let flags = arguments.map() { $0.value != nil }
        return !flags.contains(where: { $0 == false })
    }
    
    var hasSubCommands : Bool {
        return !subCommands.isEmpty
    }
    
    func getSubCommand(name : String) throws -> Command {
        guard let c = subCommands.filter({ $0.name == name }).first
            else { throw CommandError.noSuchSubCommand(command: self, subCommandName: name) }
        return c

        return options.filter( { $0.set == true })
    }
    
    internal var hasOptions : Bool {
        return !options.isEmpty
    }
    
    internal func getOption(_ name : String) throws -> Option {
        guard let option = options.filter({ $0.name == name }).first
            else { throw CommandError.noSuchOption(command:self, optionName: name) }
        return option
    }
    
    internal mutating func setOption(_ o : String) throws {
        try setOption(o, value: nil)
    }
    
    internal mutating func setOption(_ o : String, value : String?) throws {
        guard let i = optionLongForms.index(of: o)
            else { throw CommandError.noSuchOption(command:self, optionName: o) }
        if var op = options[i] as? OptionWithArgument {
