framework for preserving object prototypes