without exterlal dependency
compatible method/variable name
cache to return value