constructor improved