Added a class for notifying the user.

Also fixed:
- Used default dict methods for setting default values
- General refactoring and cleaning up