make factory a method, just give source if it should be consume()d