potentially handle many input types