Refactored the code to make it more generic