modified to include recent changes