moved implementation to header