change the return type of class methods
add tap support