spinner is optional