Moved implementation details to cpp file