Refactor and add more abilities