clean up part 2; stable version