       let c = stream[i]
       if c == 38 { // &
         entryParser = .NextKey
-        body[keyToken] = collectString(i)
+        body[keyToken] = collectFormUrlDecodedString(i)
         break
       } else if c >= 32 {
         // ignore
       } else if c == 0 {
-        body[keyToken] = collectString(i)
+        body[keyToken] = collectFormUrlDecodedString(i)
         done = true
         index = length // Done. Exit.
         break

    return String.fromCharCodes(collectToken(endIndex))
  }

  mutating func inBody() throws {
    let i = index
    let c = stream[i]

    var i = index
    let len = length
    func process() throws {
      if let k = collectFormUrlDecodedString(i) {
        keyToken = k
      } else {
        throw BodyParserError.Key
