finish up iterator api