Refactored to a plugin based approach