oops, use heap messages; also add comments describing recursive cases