write setter & getter functions
add caching function stuff