add cache decorator
trivial
add recursive methods