refactor and remove code to make it easier to read