re-writing some methods, logic seems to be flawed