Updated but not perfect