add 2nd part
implementation merged