almost done char by char