first pass at async image loading
second pass at plugin