moved all impl classes to separate headers