use smart constructor for identifier