Refactored the gem completely, added Factory class for creation