must take request object