initial stab at plugin architecture