deck factory method