Pull supplier code out to a new class, fixes #12