updated and almost done