functional (but not pretty) character select