Refactored a bit to kinda comply with Google C++ Style Guide - yes, even underscores after member names