first pass at plugin structure