add 4-parameters constructor