added a Rivet-style plug-in system