restructured using dedicated modules & classes