moved most of it out to a static.  the type in the second argument is significant so we need a method in each class.