add new arguments and refine code..