added driver / driven functions
added c template -- temporary