Added factory method pattern