break decoder interface out into own module