refactored architecture... but now its too complex for the size