working on 'virtual constructor'