factories encapsulation + graphic fix + main method

don't ask...

some (all) tests might need (will need) to be rewritten to match changes