tested core logic
added helping methods and overrides