     }
     
     /// Parse options and return parameter values
-    private func parse(_ args: ArraySlice<String>, optionParsers: [String: Parser], parameterValues: inout [String]) throws {
+    private func parseOptions(_ options: [Option], withArgs args: ArraySlice<String>, parameterValues: inout [String]) throws {
+        
+        var parsers = [String: Parser]()
+        options.forEach { option in
+            let parser = (option as! Parsable).parser
+            if let longName = option.longName {
+                parsers[longName] = parser
+            }
+            if let shortName = option.shortName {
+                parsers[shortName] = parser
+            }
+        }
         var activeOptionParser: Parser?
         
         func checkActiveOption(with value: String? = nil) throws {

            }
        }
        
        var optionParsers = [String: Parser]()
        optionFields.forEach { (name, option) in
            let parser = (option as! Parsable).parser
            if let longName = option.longName {
                optionParsers[longName] = parser
            }
            if let shortName = option.shortName {
                optionParsers[shortName] = parser
            }
        }
        let parameters = parameterFields.map { $0.1 }
        return (optionParsers, parameters )
    }
    
    /// Check duplicated option names

    
    public mutating func parse(_ args: ArraySlice<String>) throws {
        let fields = Mirror(reflecting: self).children.filter { $0.value is Parsable }
        let (options, parameters) = try parseFields(fields)
        
        var parameterValues = [String]()
        try parseOptions(options, withArgs: args, parameterValues: &parameterValues)
        try parseParameters(parameters, withValues: parameterValues)
    }
    
    /// Parse fileds and return `Parser`s
    private func parseFields(_ fields: [Mirror.Child]) throws -> ([Option], [Parameter]) {
        var knownOptionNames = Set<String>()
        var knownParameterNames = Set<String>()
        
