big refactor on character