             let newValue = oldValue + ", " + value.joined(separator: ", ")
             headers[headerKey]?[0] = newValue
         }
+    }
+    
+    ///
+    /// Creates an iterator of the underlying dictionary
+    ///
+    public func makeIterator() -> DictionaryIterator<String, Array<String>> {
+        return headers.makeIterator()
     }
     
     ///

            }
            
            
            // Headers with a simple value that can be merged
        //
        default:
            guard let headerKey = caseInsensitiveMap[key.lowercased()], let oldValue = headers[headerKey]?.first else {
                set(key, value: value)

        // Determine how to handle the header (append or merge)
        switch(key.lowercased()) {
            
        // Headers with an array value (can appear multiple times, but can't be merged)
        case "set-cookie":
            if let headerKey = caseInsensitiveMap[key.lowercased()] {
                headers[headerKey]? += value
