adopt failable initializer
cache images