bug fix && add two ctors