         let rbraceToken = tokens[consumedIndex]
         consumedIndex = tokens.index(after: consumedIndex)
         
-        return (consumedIndex, ResponseContext(method: methodContext, RESPONSE: responseToken, LBRACE: lbraceToken, params: params, RBRACE: rbraceToken))
+        return (consumedIndex, ResponseContext(method: methodContext, RESPONSE: responseToken, LBRACE: lbraceToken, params: params, RBRACE: rbraceToken, tokens: tokens.subarray(range: Range(uncheckedBounds: (contextStart, consumedIndex)))))
     }
 }
 

    let LBRACE: RecognizedToken
    let params: [ParamContext]
    let RBRACE: RecognizedToken
    
    static func consume(tokens: [RecognizedToken]) throws -> (consumedIndex: Array<RecognizedToken>.Index, context: ResponseContext) {
        let contextStart = skipNLAndWS(tokens: tokens, from: tokens.startIndex)

    let LBRACE: RecognizedToken
    let params: [ParamContext]
    let RBRACE: RecognizedToken
    
    let tokens: [RecognizedToken]
    var text: String {
        get {
            return tokens.reduce("") { (soFar, soGood) in
                return soFar + soGood.string
            }
        }
    }
    
    static func consume(tokens: [RecognizedToken]) throws -> (consumedIndex: Array<RecognizedToken>.Index, context: RequestContext) {
        let contextStart = skipNLAndWS(tokens: tokens, from: tokens.startIndex)
