don't rely on decoder directly