added etag caching code