better modularization