dropped unused methods
added memoization