refactor to make cacheable
add loadedFromCache=false to finalize() method to allow reuse