update cachable trait to be more flexible