actually implement the core interface