redisign structure
restructed