implemented tons of methods