switched to smart pointer support