updated and expanded