changed vals to abstract methods