         if optionalArgs.isEmpty && terminatedList && arguments.count != requiredArgs.count {
             return (nil, self.errorMessage(expectedCount: requiredArgs.count, givenCount: self.arguments.count))
         }
+        
+        if terminatedList && self.arguments.count > requiredArgs.count + optionalArgs.count {
+            return (nil, self.errorMessage(expectedCount: requiredArgs.count + optionalArgs.count, givenCount: self.arguments.count))
+        }
 
         var namedArgs: NSMutableDictionary = [:]
         

        }
        
        if arguments.count > requiredArgs.count {
            if !terminatedList {
                let name = self.sanitizeKey(requiredArgs.lastObject()!)
                var lastArray: [String] = []
                
                lastArray.append(namedArgs[name] as String)
                
                for i in requiredArgs.count..<self.arguments.count {
                    lastArray.append(self.arguments[i])
                }
                
                namedArgs[name] = lastArray
            } else {
                for i in 0..<optionalArgs.count {
                    let name = self.sanitizeKey(optionalArgs[i])
                    let value = self.arguments[i + requiredArgs.count]
                    namedArgs[name] = value
                }
            }
        }
        

        for argument in expectedArguments {
            if argument == "..." {
                assert(argument == expectedArguments.lastObject()!, "The non-terminal parameter must be at the end of a command signature.")
                terminatedList = false
                continue
            }
