moved to design pattern module