efficient constructor added