still a work in progress but substantially better than below v