uses C implementation if available