add clone to callback functions to preserve polymorphism