improve the whole module structure