c interfaces and implementations