Reduce a lot of code duplication by implementing