separating definitions of implementations