C interface implementtion