add more patterns impl