redesign the module structure