added static factory method