put implementatio into .cpp to avoid exposing <windows.h>