Update with improvemebts