Added events, fixed a few issues with call-backs being called more than once, adding hashing so it will only write to disk when it needs to