cleaned up and updated