Added Some interfaces and copied the smart pointer wrapper template