we tried to abstract the methods