refractored code.
Merge remote-tracking branch 'choose_remote_name/master'