more reasonable module structure