Tried to clean this up a bit
- properties that are read/write need to be on the instance level, so it's safe to declare a new instance in a multithreaded scenario