https://blog.canopas.com/imple....ment-different-types