constructor accepts NULL