add toStrings
change implements to end in impl as opposed to interfaces which start with I to avoid ambiguity
only subscribe to events once