moved an interface out of the impl package, commented implementation