General cleanup

I ended up adding a common constructor, which I initially made "private" but decided I'd let it become public after all (for those weirdo's that want to announce as well as have a callback).