plugin architecture - first pass