add combination/constructor/prototype pattern