best practices: where possible, move header file #includes from header fiels into source, and use forward declarations instead
best practices: use namespaces to avoid polluting user code