added promotional codes and refactored