works in progress but updated