many changes, will need clean up