Reorganizing solution - separating interfaces and implementations