some enhancement + some fix