             reply = try ServerReply.reply(fromBuffer: &buffer, responseTo: header.responseTo)
         case .message:
             // >= Wire Version 6
-            reply = try ServerReply.message(fromBuffer: &buffer, responseTo: header.responseTo)
+            reply = try ServerReply.message(fromBuffer: &buffer, responseTo: header.responseTo, header: header)
         default:
             throw MongoKittenError(.protocolParsingError, reason: .unsupportedOpCode)
         }
         
-        self.context.queries[reply.responseTo]?.succeed(result: reply)
+        if let query = self.context.queries[reply.responseTo] {
+            query.succeed(result: reply)
+            self.context.queries[reply.responseTo] = nil
+        }
         
         self.header = nil
         return .continue

        return ServerReply(responseTo: responseTo, cursorId: cursorId, documents: documents)
    }
    
    static func message(fromBuffer buffer: inout ByteBuffer, responseTo: Int32) throws -> ServerReply {
        // Read flags
        // TODO: The first 16 bits (0-15) are required and parsers MUST error if an unknown bit is set.
        let rawFlags = try buffer.assertLittleEndian() as UInt32

        
        self.context.queries[command.requestID] = command.promise
        
        return self.channel.writeAndFlush(command).then { promise.futureResult }
    }
    
    /// Executes the given MongoDB command, returning the result
