moved implementation to separate project