add: plugin-able interface