separated into .h and .cpp