updated with recent work