moved implementation to source file