some design changes, still bad, but better ;)