add async image loading